SpringMVC 拦截器不拦截静态资源的三种处理方式

SpringMVC 拦截器不拦截静态资源的三种处理方式css

SpringMVC提供<mvc:resources>来设置静态资源,可是增长该设置若是采用通配符的方式增长拦截器的话仍然会被拦截器拦截,可采用以下方案进行解决:html

方案1、拦截器中增长针对静态资源不进行过滤(涉及spring-mvc.xml)

<mvc:resources location="/" mapping="/**/*.js"/>  
<mvc:resources location="/" mapping="/**/*.css"/>  
<mvc:resources location="/assets/" mapping="/assets/**/*"/>  
<mvc:resources location="/images/" mapping="/images/*" cache-period="360000"/>

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**/*"/>
        <mvc:exclude-mapping path="/**/fonts/*"/>
        <mvc:exclude-mapping path="/**/*.css"/>
        <mvc:exclude-mapping path="/**/*.js"/>
        <mvc:exclude-mapping path="/**/*.png"/>
        <mvc:exclude-mapping path="/**/*.gif"/>
        <mvc:exclude-mapping path="/**/*.jpg"/>
        <mvc:exclude-mapping path="/**/*.jpeg"/>
        <mvc:exclude-mapping path="/**/*login*"/>
        <mvc:exclude-mapping path="/**/*Login*"/>
        <bean class="com.imddy.testweb.interceptor.VisitInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

 

方案2、使用默认的静态资源处理Servlet处理静态资源(涉及spring-mvc.xml, web.xml)

在spring-mvc.xml中启用默认Servletweb

<mvc:default-servlet-handler/>

在web.xml中增长对静态资源的处理spring

<servlet-mapping>    
    <servlet-name>default</servlet-name>    
    <url-pattern>*.js</url-pattern>    
    <url-pattern>*.css</url-pattern>    
    <url-pattern>/assets/*"</url-pattern>    
    <url-pattern>/images/*</url-pattern>    
</servlet-mapping>

可是当前的设置必须在Spring的Dispatcher的前面spring-mvc

 

方案3、修改Spring的全局拦截设置为*.do的拦截(涉及web.xml)

<servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

这样设置,Spring就会只针对以'.do'结尾的请求进行处理,再也不维护静态资源
 mvc

针对这三种方案的优劣分析:app

第一种方案配置比较臃肿,多个拦截器时增长文件行数,不推荐使用;第二种方案使用默认的Servlet进行资源文件的访问,Spring拦截全部请求,而后再将资源文件交由默认的Sevlet进行处理,性能上少有损耗;第三种方案Spring只是处理以'.do'结尾的访问,性能上更加高效,可是再访问路径上必须都以'.do'结尾,URL不太文雅;综上所述,推荐使用第二和第三中方案。jsp

 

springmvc的url-pattern配置的三种也模式

1: [ / ] 表示:
会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url。(不会匹配到*.jsp,即:*.jsp不会进入spring的 DispatcherServlet类)。async

2: [ /* ] 表示:
会匹配全部url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)。(会匹配*.jsp,会出现返回jsp视图时再次进入spring的DispatcherServlet 类,致使找不到对应的controller因此报404错)。性能

3: [ *.do ] 表示: 只匹配后缀名为.do的请求。

相关文章
相关标签/搜索