Spring 静态资源过滤

如果web.xml配置的拦截器如下

<!-- 配置 SpringMVC DispatcherServlet -->
<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*:config/applicationContext-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
    <!--<multipart-config>-->
    <!--<location>/</location>-->
    <!--<max-file-size>2097152</max-file-size>-->
    <!--<max-request-size>4194304</max-request-size>-->
    <!--</multipart-config>-->
</servlet>
<servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <!-- 默认匹配所有的请求 -->
    <url-pattern>/</url-pattern>
</servlet-mapping>

那么,静态资源如js、css、图片等都会经过org.springframework.web.servlet.DispatcherServlet过滤,DispatcherServlet当然处理不了这些文件,所以这些文件就发送不到客户端了。

这样我们可以使用spring的静态资源处理器,相当于告诉SpringMVC,凡是请求路径为/assets/开始的,都自动映射到/resources目录下面对应的文件上去。

<mvc:resources mapping="/assets/**" location="/resources/"/>

同时还有一个地雷,若你配置了拦截器,且拦截的是 /** ,那么你就必须换个处理方式了。

1、使用拦截器的排除 <mvc:exclude-mapping path="你的静态资源路径" />

2、交由web容器处理,在org.springframework.web.servlet.DispatcherServlet之前加入如下了内容

<servlet-mapping>    
    <servlet-name>default</servlet-name>    
    <url-pattern>/js/*</url-pattern>    
    <url-pattern>/css/*</url-pattern>    
    <url-pattern>/images/*</url-pattern>    
    <url-pattern>/fonts/*</url-pattern>    
</servlet-mapping>

内容根据情况更改!

当然,我们还可直接让上游来直接处理静态资源,这时我们只需要在springmvc配置中加入

<mvc:default-servlet-handler/>

然后再到web.xml里面做映射即可,映射内容如下

<servlet-mapping>    
    <servlet-name>default</servlet-name>    
    <url-pattern>/js/*</url-pattern>    
    <url-pattern>/css/*</url-pattern>    
    <url-pattern>/images/*</url-pattern>    
    <url-pattern>/fonts/*</url-pattern>    
</servlet-mapping>

There are no comment yet.

HTML tag cannot be used in this comment.