在spring+springMVC项目中,经常会出现无法读取js css等文件的情况,那是因为URL请求被拦截的原因。实际上,静态文件是不需要被拦截的,都应该加载。
解决办法:
方案一:拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml)
<!-- 添加注解驱动 -->
<mvc:annotation-driven />
<!-- 配置 springMVC 不拦截的静态资源 -->
<!-- 必须加,否则 RequestMapping 失效 -->
<mvc:resources mapping="/js/*" location="/resources/js"/>
<!-- css 下所有文件都映射到 /bootstrap/css/ (*: 只处理文件夹下一级; **: 文件夹下多级) -->
<mvc:resources mapping="/css/*" location="/resources/css/"/>
<mvc:resources mapping="/images/*" location="/resources/images/"/>
方案二:使用默认的servlet处理静态资源(涉及spring-mvc.xml,web.xml)
在spring-mvc.xml中添加:
<!--启用默认Servlet-->
<mvc:default-servlet-handler/>
在web.xml中添加:
<!--增加对静态资源的处理,当前的设置必须在Spring的Dispatcher的前面-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
<url-pattern>/resources/css/*</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>/resources/js/*</url-pattern>
</servlet-mapping>
方案三:修改spring的全局拦截设置为*.do的拦截(涉及web.xml)
<!-- 拦截所有请求 -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<!--<url-pattern>/</url-pattern>-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>