如果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>
文章评论