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

用户向服务器发送请求,请求被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样式;

<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的数据绑定流程:

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完全处理完请求之后被调用,一般在这个方法中进行一些资源清理工作;

<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表达式使页面的开发效率比较高。

来源:CSDN 
原文:https://blog.csdn.net/caishi13202/article/details/82588577 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC 提供了缓存的支持,其使用了 Spring 3.1 引入的基于注解的缓存技术。这个缓存技术并不是一个具体的缓存实现方案,而是一个对缓存使用的抽象。通过在既有代码添加少量的注解,可以实现缓存的功能。 在 Spring MVC ,可以通过在方法上添加 `@Cacheable` 注解来启用缓存功能。该注解可以放在控制器的方法上,当该方法被调用时,会先检查缓存是否存在相应的结果,如果存在,则直接返回缓存的结果,如果不存在,则执行方法体并将结果缓存起来。 在配置文件,可以使用 `<cache:annotation-driven/>` 标签来启用缓存功能。同时,可以根据需要配置具体的缓存实现方案,例如 EHCache 或 OSCache。 另外,在 Spring MVC ,还可以通过自定义过滤器来实现缓存控制。可以使用 `CacheFilter` 过滤器来配置缓存的参数,例如缓存时间和作用范围。通过配置过滤器的映射路径,可以指定哪些请求需要进行缓存处理。 总结起来,Spring MVC 提供了灵活且易于使用的缓存功能,通过使用注解或自定义过滤器,可以方便地实现对数据的缓存处理。这可以提高系统的性能和响应速度,并减少对后端资源的依赖。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springMVC二级缓存配置](https://download.csdn.net/download/qq_27542391/8680397)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [springMVC--页面缓存](https://blog.csdn.net/CSDN_GIA/article/details/55044775)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值