spring mvc配置文件约束与标签详解

 

Spring mvc约束与标签详解

约束头:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xmlns:mvc="http://www.springframework.org/schema/mvc"

   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

                   http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

</beans>

标签详解:

       Mvc:default-servlet-handler :

           静态资源过滤标签;该标签负责检测所有可被springDispatcherServlet拦截的请求,如果该请求是一个静态资源,spring将会把该请求交给servlet自行处理;

       工作原理:

           该标签的定义,相当于在spring容器中声明了一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 类的实例化对象,该对象被spring设计在springDispatcherServlet之前对请求进行过滤处理;

       属性:

           default-servlet-name :设置本地服务器servlet的名称; 该属性在用户没有手动修改servlet名称时无须使用,因为DefaultServletHttpRequestHandler 对象已经针对主流的服务器做了相关的名称处理;

Ex:

      <mvc:default-servlet-handler>

       Mvc:resources :

           静态资源过滤标签,该标签可定义静态资源路径,以及静态资源访问映射,资源在客户端缓存时间等;该标签相对于mvc:default-servlet-handler 标签灵活性更强,但mvc:default-servlet-handler更加方便;

       属性:

            Location :设置静态资源的相对路径,’’/” 表示相对于web的根目录,”classpath:” 则相对于classpath路径;

           Mapping :设置请求路径的映射,以’’/”开始,表示从项目路径下开始匹配;该映射路径表示:当请求路径和该mapping匹配时,则截取mapping路径后的请求路径,并相对于Location路径下去查找资源;

           cache-period :设置静态资源在客户端的缓存时间;单位秒;

Ex:

      有spring.xml配置如下:

      <!–  表示请求以: 项目/resources/** 这种形式的请求,都将查找根目录下的静态资源并返回 à

  <mvc:resources location=”/” mapping=”/resources/**”  cache-period=”3600”>   

      <!–  表示请求以:项目/js/** 这种形式的请求 ,都将到根目录下/js/目录下查找资源,并返回 à

<mvc:resources location=”/js/**” mapping=”/js/**” >

      有请求如下:

      http://ip:port/project/resources/index.html :该请求的resources/index.html与mapping 设置的”/resources/**”匹配,spring将截取”/resources/”之后的路径:index.html,并将index.html路径带入到location设置的”/”根路径下查找;即找到:项目根路径下/index.html文件

      http://ip:port/project/js/a.js :该请求将查找根目录下/js/a.js 文件;

 

       mvc:view-controller :

           请求拦截标签;

           该标签将拦截指定的请求,并把请求转交给指定页面或者controller处理;

       属性:

           Path : 指定拦截的请求路径,以“/”开始,表示从项目路径后开始匹配;

           View-name : 指定处理该请求的页面或者controller,可使用“redirect: “表示请求重定向,不使用则表示请求转发;

      View-name 工作原理:将view-name设置的值把path匹配的值替换,并生成一个新的请求路径让服务器处理;

Ex:

      有sping配置文件如下:

<mvc:view-controller path=”/toindex”  view-name=”redirect:/resources/index.html”> //重定向

<mvc:view-controller path=”/toindex2”  view-name=”/resources/index.html”>//转发

      有请求如下:

      http://ip:port/project/toindex

      该请求将被替换为一个新的请求路径,重定向给客户端重新发起请求;新请求路径如下:

      http://ip:port/project/resources/index.html 

 

       mvc:interceptor :

           请求拦截标签;

           该请求拦截标签,将拦截给定的请求路径,并且将拦截请求交给用户定义的拦截器类进行处理,该类必须是HandlerInterceptor接口的实现类;

       子标签:

           <mvc:mapping path=””> :拦截指定path路径的请求,以”/”开始,表示从项目根路径下开始匹配;

           < mvc:exclude-mapping path=””> :不拦截指定的path请求;

           <ref  bean=“”/> : 设置指定的拦截器处理类的bean引用,该bean 必须是接口HandlerInterceptor的实现类;

Ex:

      有spirng配置文件如下,配置表示拦截project/a/开始的所有请求,但/a/a.h排除在外:

 

   <bean id="testInterceptor" class="spring.mvc.demo.MyInterceptor"></bean>

   <mvc:interceptors>

      <mvc:interceptor>

         <!-- 拦截project/a/开始的所有请求 -->

         <mvc:mapping path="/a/**"/>

         <!-- 不拦截project/a/a.h请求 -->

         <mvc:exclude-mapping path="/a/a.h"/>

         <ref bean="testInterceptor" />

      </mvc:interceptor>

   </mvc:interceptors>    

      有请求如下:

      http://ip:port/project/a/bjjjj :该请求将被拦截,并交给testInterceptor处理;

      http://ip:port/project/a/a.h :该请求将不会被拦截;

 

      mvc:annotation-driven :

           该标签是spring为用户提供的一个功能注册的简写标签,该标签会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,这是Spring MVC为@Controller分发请求所必需的,并且提供了数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持读写XML的支持(JAXB)和读写JSON的支持(默认Jackson)等功能。

      个人理解(未解读spring源码,仅观察程序运行现象,有所不对,请指教):该标签当且仅当在使用了请求拦截标签:mvc:resources 、 mvc:default-servlet-handler、mvc:view-controller时,才需要使用mvc:annotation-driven标签,如不使用,将无法找到controller处理;