开门见山:
具体问题:SpringMVC中访问不到静态资源,如.js文件?
解决办法:在SpringMVC的配置文件(如*-servlet.xml)配置<mvc:default-servlet-handler/>
,同时加入<mvc:annotation-driven></mvc:annotation-driven>
然后就可以访问到.js文件了,但此方法会导致其他所有.jsp文件都出现
问题及原因详解:
出现情况如下:
.js文件的目录:
启动项目后,.jsp中.js文件不起作用,所以直接访问.js文件-->根目录/scripts/jquery-1.9.1.min.js
但是出现404,后台报错信息:
WARNING: No mapping found for HTTP request with URI [/_springmvc-2/scripts/jquery-1.9.1.min.js] in DispatcherServlet with name 'dispatcherServlet'
此URI没有被叫dispatcherServlet(这是我web.xml中配置的 DispatcherServlet 起的名字!)的映射
可以看出此问题出现原因:
配置SpringMVC的web.xml时,DispatcherServlet的``<url-pattern>/</url-pattern>``是“/”
所以将所有的URL都被拦截,但此处是不需要处理的URL(毕竟人家是静态的!)。
处理办法:加入<mvc:default-servlet-handler/>
办法原理:
default-servlet-handler 将在 SpringMVC 上下文中定义一个DefaultServletHttpRequestHandler
它会对进入 DispatcherServlet 的请求进行筛查, 如果发现是没有经过映射的请求
就将该请求交由 WEB 应用服务器默认的Servlet 处理(我的就是Tomcat)
如果不是静态资源的请求,才由 DispatcherServlet 继续处理
一般 WEB 应用服务器默认的 Servlet 的名称都是 default
若所使用的 WEB 服务器的默认 Servlet 名称不是 default
则需要通过 default-servlet-name 属性显式指定
注意:
引出第二个问题:.js文件按上述方法可以访问到
如下图:
.js文件访问成功
但是项目其他,如.jsp文件可能会出现404,即使你访问一个不存在的.jsp文件也只会提示404
解决办法 :
加入<mvc:annotation-driven></mvc:annotation-driven>
其作用
网友评论