官网 4.3.24文档 SNAPSHOT:快照版,可以稳定使用,且仍在继续改进版本 R,RELEASE:正式版,等价于GA GA:(Ggeneral Availability):发行稳定版,官方推荐使用此版本。 版本说明参考
环境搭建:SpringMVC环境简单搭建
@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。 Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求 • 在控制器的类定义及方法定义处都可标注 @RequestMapping – 类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录 – 方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若 类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于WEB 应用的根目录 • DispatcherServlet 截获请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。
一个请求的内容如下: params和header仅供了解,知道这两个参数加上后,访问后台,就更加需要符合这两个里面的条件,才能访问指定的方法
@RequestMapping(value = "/index", method = RequestMethod.GET,params = {"pid=1","pname"},headers = {"Accept-Language=zh-CN,zh;q=0.9"}) public String index() { logger.info("RequestMapping start"); return "index"; }URL:IP+PORT+项目名+类名注解+方法名注解 即如果有类名+方法名映射,那么类名就相当于web项目名下的根目录,如果没有类名,则方法名就相当于根目录
说白了,就是url支持通配符过滤而已,就是只要满足这个通配符的要求,所有请求都会进入到此方法中,这个也了解
主要作用就是后台参数绑定Url里的占位符,由于有这种功能,后续为REST风格提供了基础
Spring MVC 通过分析处理方法的签名,将 HTTP 请求信息绑定到处理方法的相应形参中 对方法及方法入参标注相应的注解(@PathVariable、@RequestParam、@RequestHeader等)、SpringMVC 框架会将 HTTP 请求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理。
在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法 – value:参数名 – required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中 用的比较少
@CookieValue 可让处理方法入参绑定某个 Cookie 值 就是把cook值放到一个参数里,这个也了解
Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。
MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数: • HttpServletRequest • HttpServletResponse • HttpSession • java.security.Principal • Locale • InputStream • OutputStream • Reader • Writer
Spring MVC 提供了以下几种途径输出模型数据: – ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据 – Map 及 Model: 入参为 org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map中的数据会自动添加到模型中。 – @SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性 – @ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中
控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。 • 添加模型数据: – MoelAndView addObject(String attributeName, ObjectattributeValue) – ModelAndView addAllObject(Map<String, ?> modelMap) • 设置视图: – void setView(View view) – void setViewName(String viewName) pom
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>suc.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>Title</title> </head> <body> <h3>Now : ${requestScope.nowTime}</h3> </body> </html> @RequestMapping(value = "/index") public ModelAndView index() { String view = "suc"; ModelAndView mv = new ModelAndView(view); mv.addObject("nowTime",new Date()); return mv; }
• 若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 @SessionAttributes, Spring MVC将在模型中对应的属性暂存到 HttpSession 中。 • @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中 – @SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。 – @SessionAttributes(value={“user1”, “user2”}) – @SessionAttributes(types={User.class, Dept.class}) – @SessionAttributes(value={“user1”, “user2”}, types={Dept.class})
在方法定义上使用 @ModelAttribute 注解: Spring MVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。 在方法的入参前使用 @ModelAttribute 注解: – 可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参 – 将方法入参对象添加到模型中
springmvc接收json数据的4种方式 SpringMVC中controller接收Json数据 SpringMVC接收和响应json数据
• ConversionService 是 Spring 类型转换体系的核心接口。 • 可以利用 ConversionServiceFactoryBean 在 Spring 的 IOC容器中定义一个 ConversionService. Spring 将自动识别出IOC 容器中的 ConversionService,并在 Bean 属性配置及Spring MVC 处理方法入参绑定等场合使用它进行数据的转换 • 可通过 ConversionServiceFactoryBean 的 converters 属性注册自定义的类型转换器
所以,当我们需要支持json字符串转对象,对象转json字符串的时候,是需要引入相关json包的 pom.xml
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.7.0</version> </dependency>
DispatcherServlet 默认加载 /WEBINF/.xml 的 Spring 配置文件, 启动 WEB 层的 Spring 容器。可以通过 contextConfigLocation 初始化参数自定义配置文件的位置和名称
<!-- 配置 DispatcherServlet --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置 DispatcherServlet 的一个初始化参数: 配置 SpringMVC 配置文件的位置和名称 --> <!-- 实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件, 而使用默认的. 默认的配置文件为: /WEB-INF/<servlet-name>-servlet.xml --> <!-- <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> --> <load-on-startup>1</load-on-startup> </servlet>若写成/*就会报这个错误
慎用这个,mvc:default-servlet-handler/,不然添加了后,前端页面返回给浏览器,浏览器只会显示整个代码出来
jsp里一定要写 isELIgnored=“false”,不然EL表达式不会执行
参考