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增加的这个过滤器,可以将请求转换为标准的任意类型的请求用法:

<!--配置好过滤器后,在form表单中增加一个名为_method的隐藏input,设置好value-->
<form method="PSOT">
    <input type="hidden" name="_method" value="DELETE">
</form>

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中。

  1. 用户向服务器发送请求,请求被SpringMVC的前端控制器DispatcherServlet截获;
  2. DispatcherServlet对请求的URL(统一资源定位符)进行解析,得到URI(请求资源标识符),然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象,包括Handler对象以及Handler对象对应的拦截器,这些对象都会被封装到一个HandlerExecutionChain对象当中返回;
  3. DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter。HandlerAdapter的设计符合面向对象中的单一职责原则,代码结构清晰,便于维护,最为重要的是,代码的可复制性高。HandlerAdapter会被用于处理多种Handler,调用Handler实际处理请求的方法;
  4. 提取请求中的模型数据,开始执行Handler(Controller),在填充Handler的入参过程中,根据配置,spring将帮助做一些额外的工作:
  5. Handler执行完成后,会向DispatcherServlet返回一个ModelAndView对象,对于那些返回的是String,Map,View或ModelMap的方法,SpringMVC也会在内部将它包装成一个ModelAndView对象,ModelAndView中应该包含视图名或视图模型;
  6. DiapatcherServlet根据返回的ModelAndView对象,Dispachter选择一个合适的ViewResolver(视图解析器);
  7. ViewResolver结合Model和View来渲染视图;
  8. 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样式;

<form:form action="formTag/form.do" method="POST" commandName="user">
    <form:input path="userName" htmlEscape="true" cssClass="inputCss" 
        cssErrorClass="errorCss"/>  
</form:form>

13、SpringMVC处理静态资源:

    优雅的Restful风格的资源URL不希望带上.html, .jsp等后缀名,若DispacherServlet的请求映射配置为/,则会拦截所有请求,包括对静态资源的请求,SpringMVC会将它当成一个普通的请求进行处理,当找不到处理器将会导致错误。

解决方案:

    1. 在SpringMVC的配置文件中增加一个<mvc-default-servlet-handler/>会所有请求进入Dispacheter的之前进行拦截,如果发现是没有经过映射的请求,就会交给web服务器默认的servlet进行处理,注意:一般web服务(Tomcat,Jeety)的默认的servlet的name都是default,如果servletName不是default,则要通过<mvc:default-servlet-name>进行指定;
    2. SpringMVC3.0.4以后提供的静态资源映射 <mvc:resources mapping="/images/**" location="/images/" />;
    3. DispacherServlet拦截.do请求。

14、SpringMVC的数据绑定流程:

  1. SpringMVC主框架将ServletRequest对象和目标方法的入参实例传递给WebDataBinderFactory对象,用来创建DataBinder对象;
  2. DataBinder调用注册在SpringMVC上下文中的ConversionService对象进行数据类型转换,数据格式化工作,将Servlet中的请求信息填充的入参对象中;
  3. 调用Validator组件对已绑定了请求数据源的入参对象进行数据合法性校验,并最终生成数据绑定结果BindingData对象;
  4. SpringMVC抽取BindingResult中的入参对象和校验错误对象,将它们赋给处理方法的响应入参。

15、@DateTimeFormat,@NumberFormat:

    加上对象的属性上,可以给对象的属性加上默认的格式化规则。

16、@Valid:

    加上方法的对象入参,表示该入参需要进行数据校验,需要配合下面的JSR 303属性校验规则使用。

17、JSR 303是JAVA为JAVABEAN的数据合法性提供校验的框架,主要的校验规则有:

  1. @Null             被注释的属性必须为null;
  2. @NotNull        被注释的属性不允许为null;
  3. @AssertTrue     被注释的属性必须为true;
  4. @AssertFalse     被注释的属性必须为false;
  5. @Min(value)        被注释的属性必须是一个数字,并且大于指定的值;
  6. @Max(value)     被注释的属性必须是一个数字,并且小于指定值;
  7. @DecimalMin(val) 被注释的属性必须是一个数字,并且大于等于指定的值;
  8. @DecimalMax(val) 被注释的属性必须是一个数字,并且小于等于指定的值;
  9. @Size(min, max)    被注释的属性值必须在min-max之间;
  10. @Digits(5,0.2) 被注释的属性必须为数字,并且误差在可接受的范围内;
  11. @Past             被注释的属性必须是一个过去的日期;
  12. @Future            被注释的属性必须是一个未来的日期;
  13. @Parttern(value)被注释的属性必须满足指定的正则表达式;
  14. @Email 被注释的属性必须是一个电子邮箱;
  15. @Length 备注的字符串长度必须在指定的范围内;
  16. @NotEmpty 被注释的字符串必须非空;
  17. @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完全处理完请求之后被调用,一般在这个方法中进行一些资源清理工作;
<mvc:interceptors>
    <!--拦截所有资源-->
    <bean class="com.fcbox.springmvc.interceptors.HelloInterceptor"></bean>
		<!--拦截指定资源-->
		<mvc:interceptor>
			<mvc:mapping path="wechatController"/>
			<bean class="com.fcbox.springmvc.interceptor.HellowInteceptor2"></bean>
			</mapping>
		</mvc:interceptor>
	<bean class="org.springframework.web.servlet.i18n.localeChangeInterceptor"></bean>
</mvc:interceptor>

20、 SpringMVC的异常处理:

    SpringMVC通过HandlerExceptionResolver处理异常,包裹Handler映射,数据绑定以及目标方法执行时发生的异常。

21、SpringMVC和Struts2的对比:

  • SpringMVC的入口是Servlet,而Struts2的入口是Filter;
  • SpringMVC是基于方法的,Struts2是基于Action的,每次都会实例化一个Action;
  • SpringMVC更加简洁高效,开发效率比较高;
  • Struts2使用的OGNL表达式使页面的开发效率比较高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值