SpringMVC拦截器拦截静态资源
问题
在使用SpringMVC进行开发的时候,遇到了以下代码不能执行的情况。关键是样式丢失,图片什么的也都丢失,而且我已经正确导入了JQuery框架,浏览器报**SyntaxError: expected expression, got <*
*错误。
在 springMVC中提到 Interceptor拦截器是会拦截静态资源的 比如html js css image这类,虽然都是页面 但是html属于静态资源,jsp不属于,所以这里发现,只要配置拦截器,就会出现页面错乱的情况。
一旦注释这段配置代码,就会正常显示。
解决
通过测试与上网查找,最终发现,是拦截器这里对资源进行了拦截。
原理:通过Request获取请求的uri进行分析过滤。
防止SpringMVC拦截器拦截js等静态资源文件
SpringMVC提供mvc:resources来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下方案进行解决:
-
方案一、拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml)
-
方案二、使用默认的静态资源处理Servlet处理静态资源(涉及spring-mvc.xml, web.xml)
-
- 在spring-mvc.xml中启用默认Servlet
-
- 在web.xml中增加对静态资源的处理
-
方案三、修改Spring的全局拦截设置为.do的拦截(涉及web.xml)*
三种方案的优劣分析
1. 第一种方案配置比较臃肿,多个拦截器时增加文件行数,不推荐使用;
2. 第二种方案使用默认的Servlet进行资源文件的访问,Spring拦截所有请求,然后再将资源文件交由默认的Sevlet进行处理,性能上少有损耗;
3.第三种方案Spring只是处理以’.action’结尾的访问,性能上更加高效,但是再访问路径上必须都以’.action’结尾,URL不太文雅;
综上所述,推荐使用第二和第三种方案