1.问题再现:

<servlet-mapping>  
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

we.xml的mapping配置如果是“/”,那么在jsp页面中访问js文件会被拦截:

<script src="/js/jquery.min.js"></script>

打开浏览器开发者工具,发现js访问不到。

下面是集中解决方案。

2.修改web.xml,把mapping改成"*.htm"或者"*.do"这样的,就可以访问了。当然这种并不友好,如果业务需求必须是“/”,就不能用了。

3.另一种方案还是修改web.xml。在配置spring的核心servlet前面加上下面的配置:

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>

这样的话,所有i的请求都会先被这个tomcat的名字为default的servlet处理,那么js的请求肯定在这里处理了,就不会被spring的拦截器拦住。但是缺点是,静态文件不能放到web-inf目录下,web-inf的必须经过controller转发才能访问。

4.最后一种也是最推荐的一种,不用修改web.xml文件,而且对静态文件的位置也没有规定,只要修改spring mvc的配置文件就可以了。添加下面的配置,当然要引入mvc命名空间。

<mvc:annotation-driven/> 
<mvc:resources location="/WEB-INF/js/" mapping="/resource/js/**" />

这样所有的resources配置的文件就会被spring的另一个组件处理,不会被拦截。location配置的是静态文件的位置。mapping配置的是静态文件的引用方式。

最后在jsp页面只要这样就可以引用了:

<script src="/resource/js/jquery.min.js"></script>