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增加的这个过滤器,可以将请求转换为标准的任意类型的请求用法:
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类型的对象作为入参,主要有以下几种:
HttpServletRequest
HttpServletResponse
HttpSesson
java.security.Principal
locale
InputStream
OutPutStram
Reader
Writer
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中。
用户向服务器发送请求,请求被SpringMVC的前端控制器DispatcherServlet截获;
DispatcherServlet对请求的URL(统一资源定位符)进行解析,得到URI(请求资源标识符),然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象,包括Handler对象以及Handler对象对应的拦截器,这些对象都会被封装到一个HandlerExecutionChain对象当中返回;
DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter。HandlerAdapter的设计符合面向对象中的单一职责原则,代码结构清晰,便于维护,最为重要的是,代码的可复制性高。HandlerAdapter会被用于处理多种Handler,调用Handler实际处理请求的方法;
提取请求中的模型数据,开始执行Handler(Controller),在填充Handler的入参过程中,根据配置,spring将帮助做一些额外的工作:
Handler执行完成后,会向DispatcherServlet返回一个ModelAndView对象,对于那些返回的是String,Map,View或ModelMap的方法,SpringMVC也会在内部将它包装成一个ModelAndView对象,ModelAndView中应该包含视图名或视图模型;
DiapatcherServlet根据返回的ModelAndView对象,Dispachter选择一个合适的ViewResolver(视图解析器);
ViewResolver结合Model和View来渲染视图;
DispatcherServlet将视图渲染结果返回给客户端。
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的数据绑定流程:
SpringMVC主框架将ServletRequest对象和目标方法的入参实例传递给WebDataBinderFactory对象,用来创建DataBinder对象;
DataBinder调用注册在SpringMVC上下文中的ConversionService对象进行数据类型转换,数据格式化工作,将Servlet中的请求信息填充的入参对象中;
调用Validator组件对已绑定了请求数据源的入参对象进行数据合法性校验,并最终生成数据绑定结果BindingData对象;
SpringMVC抽取BindingResult中的入参对象和校验错误对象,将它们赋给处理方法的响应入参。
15、@DateTimeFormat,@NumberFormat:
加上对象的属性上,可以给对象的属性加上默认的格式化规则。
16、@Valid:
加上方法的对象入参,表示该入参需要进行数据校验,需要配合下面的JSR 303属性校验规则使用。
17、JSR 303是JAVA为JAVABEAN的数据合法性提供校验的框架,主要的校验规则有:
@Null 被注释的属性必须为null;
@NotNull 被注释的属性不允许为null;
@AssertTrue 被注释的属性必须为true;
@AssertFalse 被注释的属性必须为false;
@Min(value) 被注释的属性必须是一个数字,并且大于指定的值;
@Max(value) 被注释的属性必须是一个数字,并且小于指定值;
@DecimalMin(val) 被注释的属性必须是一个数字,并且大于等于指定的值;
@DecimalMax(val) 被注释的属性必须是一个数字,并且小于等于指定的值;
@Size(min, max) 被注释的属性值必须在min-max之间;
@Digits(5,0.2) 被注释的属性必须为数字,并且误差在可接受的范围内;
@Past 被注释的属性必须是一个过去的日期;
@Future 被注释的属性必须是一个未来的日期;
@Parttern(value)被注释的属性必须满足指定的正则表达式;
@Email 被注释的属性必须是一个电子邮箱;
@Length 备注的字符串长度必须在指定的范围内;
@NotEmpty 被注释的字符串必须非空;
@Range 被注释的属性必须在合适的范围内。
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的对比:
SpringMVC的入口是Servlet,而Struts2的入口是Filter;
SpringMVC是基于方法的,Struts2是基于Action的,每次都会实例化一个Action;
SpringMVC更加简洁高效,开发效率比较高;
Struts2使用的OGNL表达式使页面的开发效率比较高。
来源:CSDN
原文:https://blog.csdn.net/caishi13202/article/details/82588577