SpringMVC功能总结

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类型的对象作为入参,主要有以下几种:

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的执行流程:

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的配置文件中增加一个会所有请求进入Dispacheter的之前进行拦截,如果发现是没有经过映射的请求,就会交给web服务器默认的servlet进行处理,注意:一般web服务(Tomcat,Jeety)的默认的servlet的name都是default,如果servletName不是default,则要通过进行指定;
    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 

你可能感兴趣的:(SpringMVC功能总结)