開門見山:
具體問題:SpringMVC中訪問不到靜態(tài)資源吭敢,如.js文件枢赔?
解決辦法:在SpringMVC的配置文件(如*-servlet.xml)配置<mvc:default-servlet-handler/>
课舍,同時(shí)加入<mvc:annotation-driven></mvc:annotation-driven>
然后就可以訪問到.js文件了,但此方法會導(dǎo)致其他所有.jsp文件都出現(xiàn)
問題及原因詳解:
出現(xiàn)情況如下:
.js文件的目錄:
.js文件的目錄
啟動項(xiàng)目后,.jsp中.js文件不起作用,所以直接訪問.js文件-->根目錄/scripts/jquery-1.9.1.min.js
但是出現(xiàn)404,后臺報(bào)錯(cuò)信息:
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 起的名字玲躯!)的映射
可以看出此問題出現(xiàn)原因:
配置SpringMVC的web.xml時(shí),DispatcherServlet的``<url-pattern>/</url-pattern>``是“/”
所以將所有的URL都被攔截鳄乏,但此處是不需要處理的URL(畢竟人家是靜態(tài)的跷车!)。
處理辦法:加入<mvc:default-servlet-handler/>
辦法原理:
default-servlet-handler 將在 SpringMVC 上下文中定義一個(gè)DefaultServletHttpRequestHandler
它會對進(jìn)入 DispatcherServlet 的請求進(jìn)行篩查, 如果發(fā)現(xiàn)是沒有經(jīng)過映射的請求
就將該請求交由 WEB 應(yīng)用服務(wù)器默認(rèn)的Servlet 處理(我的就是Tomcat)
如果不是靜態(tài)資源的請求橱野,才由 DispatcherServlet 繼續(xù)處理
一般 WEB 應(yīng)用服務(wù)器默認(rèn)的 Servlet 的名稱都是 default
若所使用的 WEB 服務(wù)器的默認(rèn) Servlet 名稱不是 default
則需要通過 default-servlet-name 屬性顯式指定
注意:
引出第二個(gè)問題:.js文件按上述方法可以訪問到
如下圖:
.js文件訪問成功
但是項(xiàng)目其他朽缴,如.jsp文件可能會出現(xiàn)404,即使你訪問一個(gè)不存在的.jsp文件也只會提示404
解決辦法 :
加入<mvc:annotation-driven></mvc:annotation-driven>
其作用