1.介绍
1.1 官网查看
官网
4.3.24文档
SNAPSHOT:快照版,可以稳定使用,且仍在继续改进版本
R,RELEASE:正式版,等价于GA
GA:(Ggeneral Availability):发行稳定版,官方推荐使用此版本。
版本说明参考
环境搭建:SpringMVC环境简单搭建
1.2 大概运行流程
2.接收请求处理
2.1 RequestMapping(主要用于URL映射、校验等处理)
@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。
Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求
• 在控制器的类定义及方法定义处都可标注
@RequestMapping
– 类定义处
:提供初步的请求映射信息。相对于 WEB 应用的根目录
– 方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若
类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于WEB 应用的根目录
• DispatcherServlet 截获请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。
2.1.1 请求映射以及校验
一个请求的内容如下:
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项目名下的根目录,如果没有类名,则方法名就相当于根目录
2.1.2 Ant风格
说白了,就是url支持通配符过滤而已,就是只要满足这个通配符的要求,所有请求都会进入到此方法中,这个也了解
2.1.3 PathVariable
主要作用就是后台参数绑定Url里的占位符,由于有这种功能,后续为REST风格提供了基础
2.1.3 REST风格
2.2 请求参数处理
Spring MVC 通过分析处理方法的签名,将 HTTP 请求信息绑定到处理方法的相应形参中
对方法及方法入参标注相应的注解(@PathVariable、@RequestParam、@RequestHeader
等)、SpringMVC 框架会将 HTTP 请求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理。
2.2.1 RequestParam
在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法
– value:参数名
– required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
2.2.2 RequestHeader
请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法
的入参中
用的比较少
2.2.3 CookieValue
@CookieValue 可让处理方法入参绑定某个 Cookie 值
就是把cook值放到一个参数里,这个也了解
2.2.4 POJO方式传递给方法入参
Spring MVC 会按请求参数名和 POJO 属性名
进行自动匹配,自动为该对象填充属性值。支持级联属性。
2.2.5 Servlet 原生 API 获取形参
MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数:
• HttpServletRequest
• HttpServletResponse
• HttpSession
• java.security.Principal
• Locale
• InputStream
• OutputStream
• Reader
• Writer
2.2.6
2.2.7
2.3 输出模型数据
Spring MVC 提供了以下几种途径输出模型数据:
– ModelAndView
: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据
– Map 及 Model
: 入参为
org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map中的数据会自动添加到模型中。
– @SessionAttributes
: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性
– @ModelAttribute
: 方法入参标注该注解后, 入参的对象就会放到数据模型中
2.3,1 ModelAndView
控制器处理方法的返回值如果为 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;
}
2.3.2 入参为Map
2.3.3 SessionAttributes
• 若希望在多个请求之间共用某个模型属性数据
,则可以在控制器类上标注一个 @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})
2.3.4 ModelAttribute
在方法定义上使用 @ModelAttribute 注解
:
Spring MVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。
在方法的入参前使用 @ModelAttribute 注解
:
– 可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参
– 将方法入参对象添加到模型中
2.4 Json接收与返回
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>
3.注意
3.1 springmvc默认加载配置文件路径
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>
3.2 No mapping found for HTTP request with URI
若写成/*就会报这个错误
3.3 default-servlet-handler
慎用这个,mvc:default-servlet-handler/,不然添加了后,前端页面返回给浏览器,浏览器只会显示整个代码出来
3.4 EL表达式不执行
jsp里一定要写 isELIgnored=“false”,不然EL表达式不会执行