spring mvc 靜態(tài)資源 404問題

spring mvc 靜態(tài)資源 404問題
在web.xml配置servlet-mapping的時(shí)候,如果url-pattern設(shè)置為“/” (如下),很多人都會(huì)遇到導(dǎo)入js,css,圖片等靜態(tài)資源出現(xiàn)Firefox調(diào)試窗口會(huì)報(bào)出的404錯(cuò)誤,而你的確也不能訪問那些資源
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
百度了很久,大致有3種方法:但是我仍然沒有解決404問題,后來又google了一下,發(fā)現(xiàn)少了一個(gè)關(guān)鍵的地方(在百度搜索中都沒提到的一個(gè)地方,所以認(rèn)為比較關(guān)鍵 :)),就是在jsp頁面中導(dǎo)入靜態(tài)資源的時(shí)候需要用<c:url>標(biāo)簽。
例如:
<%@
taglib prefix="c"
uri="http://Java.sun.com/jsp/jstl/core"
%>
<script
type="text/JavaScript"
src='<c:url value="/js/jQuery.js"></c:url>'>
</script>
這里的c:url中 value的值也是需要特別注意到地方,見下面3種方法詳細(xì)說明:

方法1. 修改web.xml文件,增加對靜態(tài)資源的url映射
如:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>.js</url-pattern></servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>
.css</url-pattern>
</servlet-mapping>
在web.xml中添加好配置后,在jsp頁面就可以引用這些靜態(tài)資源了,但需要用<c:url value="">,
如:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<script type="text/javascript" src='<c:url value="/js/jquery.js"></c:url>'></script>
這里還需要說明的是:這種方法不能訪問WEB-INF目錄下的靜態(tài)資源,也就是js目錄必須是web根(可能是webapp,webContent等)目錄下,否則是不能引用的;如果放在WEB-INF目錄下,即使你使用<c:url value=“/WEB-INF/js/jquery.js”>也是會(huì)出現(xiàn)404錯(cuò)誤的。

百度時(shí)發(fā)現(xiàn):以下各容器的default servlet名字,而且還提到靜態(tài)資源servlet映射需要寫在dispatcherServlet的前面;我在Jboss-eap-5.1中測試過,前后沒有關(guān)系;所以可能是容器或者版本的關(guān)系吧。
Tomcat, Jetty, JBoss, and GlassFish 默認(rèn) Servlet的名字 -- "default"Google App Engine 默認(rèn) Servlet的名字 -- "_ah_default"Resin 默認(rèn) Servlet的名字 -- "resin-file"WebLogic 默認(rèn) Servlet的名字 -- "FileServlet"WebSphere 默認(rèn) Servlet的名字 -- "SimpleFileServlet"

方法2.在相應(yīng)的 -servlet.xml中添加spring配置<mvc:default-serlvet-handler>
如:
<mvc:default-servlet-handler/>
這種方法只需要添加一行代碼,在jsp頁面中引用時(shí)和方法1一樣,同樣也不能引用WEB-INF下的資源。

方法3.使用spring 3.0.4的新特性,在相應(yīng)的 -servlet.xml中添加配置<mvc:resource>
如:
3.1 <mvc:resources location="/js/" mapping="/js/" />

3.2 <mvc:resources location="/WEB-INF/js/" mapping="/js/
" />
這種方法我寫了兩個(gè)配置,不同的地方只是location的值,一個(gè)是“/js/”,一個(gè)是“/WEB-INF/js/”;兩種都可以,根據(jù)你自己的目錄結(jié)構(gòu)來引用。這就說明使用這種方式可以引用WEB-INF目錄下的靜態(tài)資源;這里的mapping屬性的值用了ant的通配符方式,"/js/*"(兩個(gè)"")指location的值所表示的目錄以及所有子目錄;但是在jsp頁面中引用時(shí)需要注意:
<c:url value="/js/jquery.js"> value的值必須類似于mapping屬性的值,如果是3.1方式的配置,則引用的是web根目錄下js/jquery.js,如果是3.2方式的配置,則引用的是web根目錄下WEB-INF/js/jquery.js;
<c:url value="/js/ui/jquery-ui.js"> 則引用location目錄下子目錄ui下的jquery-ui.js。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,954評論 6 342
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,366評論 11 349
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 是誰, 在夜里, 拖拽長長的尾跡; 在浩瀚的太空, 留下深深的嘆息。 綻放一瞬的絢麗, 犧牲所有,留下燦爛記憶。 ...
    Z0001閱讀 358評論 0 3