1、@RequestMapping:
params:指定请求参数,例:params={"param1=value1","param2"}表示请求中必须包含param1和param2,且param1必须 等于value1;
headers: 指定请求头request headers中的参数,例:headers="contentType=text/**" 则请求头中,contentType必须为 text/** ;
value:映射路径,可省略,?表示匹配单个字符,*表示匹配任意字符,**表示匹配任意层级;
method:指定请求方法,GET表示获取数据,POST表示新增数据,PUT表示更新数据,DELETE表示删除数据。
2、@PathVariable:
映射URL绑定的占位符,将URL中{xxx}的数据映射到 @PathVariable("xxx") 指定的变量中;
例:@RequestMapping(value="/queryStudent/{id}"), @PathVariable("id") Long id。
3、HiddenHttpMethodFilter:这是一个Filter,浏览器form表单只能提交GET或者POST请求,通过Spring3.0增加的这个过滤器,可以将请求转换为标准的任意类型的请求用法:
4、@RequestParam和@RequestHeader
SpringMVC会将http请求中对应的数据绑定在注解的方法入参中,有两个参数,value和required,表示绑定的参数名和是否必须,例如:
public void queryStu(@RequestParam(value="username", required=false) String XXXXX,
@RequestParam(required=true) String password){
};
public void queryStu(@RequestHeader("Accept-Encoding") String encoding,
@RequestHeader("Keep-Alive") String keepAlive){
};
PS:SpringMVC会自动给POJO类型的入参根据POJO的属性名自动注入值,并且封装类型还支持级联属性。
5、@CookieValue
将请求参数中的cookie值设置到对应的入参中,例:
public void queryStu(@CookieValue(value = "sessionId", required = true) String sessionId,
@RequestParam("age") Integer age) {
};
6、 MVC的handler还可以自动注入ServletAPI类型的对象作为入参,主要有以下几种:
7、当入参为Map或Model时,SpringMVC会自动将请求数据封装进这个Map或Model中;
8、@SessionAttributes: 将模型数据中的某个属性设置到HttpSession中,以便在多个请求中共享这个属性,例:
@SessionAttributes(types=User.class) : 将隐藏模式中所有类型为User.class的属性添加到session中。
@SessionAttributes(value={"value1","value2"}, types={User.class, DepartMent.class})
9、@ModelAttribute:
可以作用在方法上或者参数上,作用在方法上时,会在执行请求目标方法前先调用ModelAttribute注解的方法,我们经常用这种方式设置一些默认属性;作用在参数上时,可以从模型数据中取出对应的参数,SpringMVC会自动注入属性名相同的参数,所以ModelAttribute一般用来取出pojo对象。
10、SpringMVC的执行流程:
具体步骤解释:
● 消息转换: 将请求的消息,如json、xml等数据转换成一个对象,将对象转换为指定的响应信息;
● 数据转换:对请求消息进行数据转换,如String转换成Integer、Double等;
● 数据格式化:对请求的消息进行数据格式化,如将字符串转换为格式化数字或格式化日期等;
● 数据验证:验证数据的有效性如长度、格式等,验证结果存储到BindingResult或Error中。
11、重定向和转发,在返回的逻辑视图名中返回下面的值即可:
redirect:success.jsp :重定向到success.jsp页面
forward: success.jsp : 转发到success.jsp页面
12、Spring的表单标签:
通过SpringMVC的表单标签可以实现模型数据中的属性和HTML表单元素想绑定,实现了表单数据更便捷的编辑和表单值的回显。
commandName: 取Model中指定对象的属性;
mehod: 支持的GET,POST,DELETE, PUT请求方式;
path: 对象的模型属性名;
htmlEscape: 是否对表单值的HTML特殊字符进行转换,默认是true;
cssClass: 表单组件对应的CSS样式类名;
cssErrorClass: 表单属性数据存在错误时,采取的css样式;
13、SpringMVC处理静态资源:
优雅的Restful风格的资源URL不希望带上.html, .jsp等后缀名,若DispacherServlet的请求映射配置为/,则会拦截所有请求,包括对静态资源的请求,SpringMVC会将它当成一个普通的请求进行处理,当找不到处理器将会导致错误。
解决方案:
1. 在SpringMVC的配置文件中增加一个
2. SpringMVC3.0.4以后提供的静态资源映射
3. DispacherServlet拦截.do请求。
14、SpringMVC的数据绑定流程:
15、@DateTimeFormat,@NumberFormat:
加上对象的属性上,可以给对象的属性加上默认的格式化规则。
16、@Valid:
加上方法的对象入参,表示该入参需要进行数据校验,需要配合下面的JSR 303属性校验规则使用。
17、JSR 303是JAVA为JAVABEAN的数据合法性提供校验的框架,主要的校验规则有:
18、文件上传,MultipartResolver:
SpringMVC默认不支持文件上传,如果要使用,则需要配置CommonsMultipartResolver,因为CommonMultipartResolver使用的是jakarta Commons FileUpload技术,所以需要添加jakarta Commons FileUpload和jakarta Commons IO的依赖。
19、自定义拦截器,SpringMVC自定义的拦截器必须实现HandlerInterceptor接口:
1.preHandle(): 这个方法在业务处理器处理请求之前被调用,在该方法中对request进行处理,如果继续执行返回true, 否则返回false;
2.postHandle(): 这个方法在业务处理器处理完请求之后,DispacherServlet向客户端返回响应之前被调用。
3.afterComletion(): 在dispacherServlet完全处理完请求之后被调用,一般在这个方法中进行一些资源清理工作;
20、 SpringMVC的异常处理:
SpringMVC通过HandlerExceptionResolver处理异常,包裹Handler映射,数据绑定以及目标方法执行时发生的异常。
21、SpringMVC和Struts2的对比: