spring mvc 靜態資源 404問題

spring mvc 靜態資源 404問題 javascript

在web.xml配置servlet-mapping的時候,若是url-pattern設置爲「/」 (以下),不少人都會遇到導入js,css,圖片等靜態資源出現Firefox調試窗口會報出的404錯誤,而你的確也不能訪問那些資源 css

<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> java

百度了好久,大體有3種方法:可是我仍然沒有解決404問題,後來又google了一下,發現少了一個關鍵的地方(在百度搜索中都沒提到的一個地方,因此認爲比較關鍵 :)),就是在jsp頁面中導入靜態資源的時候須要用<c:url>標籤。 jquery

例如: web

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> spring

<script type="text/javascript" src='<c:url value="/js/jquery.js"></c:url>'></script> mvc

這裏的c:url中 value的值也是須要特別注意到地方,見下面3種方法詳細說明: app


方法1. 修改web.xml文件,增長對靜態資源的url映射 webapp

如: jsp

<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頁面就能夠引用這些靜態資源了,但須要用<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目錄下的靜態資源,也就是js目錄必須是web根(多是webapp,webContent等)目錄下,不然是不能引用的;

若是放在WEB-INF目錄下,即便你使用<c:url value=「/WEB-INF/js/jquery.js」>也是會出現404錯誤的。

百度時發現:如下各容器的default servlet名字,並且還提到靜態資源servlet映射須要寫在dispatcherServlet的前面;我在Jboss-eap-5.1中測試過,先後沒有關係;因此多是容器或者版本的關係吧。

Tomcat, Jetty, JBoss, and GlassFish  默認 Servlet的名字 -- "default"
Google App Engine 默認 Servlet的名字 -- "_ah_default"
Resin 默認 Servlet的名字 -- "resin-file"
WebLogic 默認 Servlet的名字  -- "FileServlet"
WebSphere  默認 Servlet的名字 -- "SimpleFileServlet" 


方法2.在相應的 -servlet.xml中添加spring配置<mvc:default-serlvet-handler>

如:

<mvc:default-servlet-handler/>

這種方法只須要添加一行代碼,在jsp頁面中引用時和方法1同樣,一樣也不能引用WEB-INF下的資源。


方法3.使用spring 3.0.4的新特性,在相應的 -servlet.xml中添加配置<mvc:resource>

如:3.1 <mvc:resources location="/js/" mapping="/js/**" />

    或3.2 <mvc:resources location="/WEB-INF/js/" mapping="/js/**" />

這種方法我寫了兩個配置,不一樣的地方只是location的值,一個是「/js/」,一個是「/WEB-INF/js/」;兩種均可以,根據你本身 的目錄結構來引用。這就說明使用這種方式能夠引用WEB-INF目錄下的靜態資源;這裏的mapping屬性的值用了ant的通配符方式,"/js /**"(兩個"*")指location的值所表示的目錄以及全部子目錄;可是在jsp頁面中引用時須要注意:

<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。

相關文章
相關標籤/搜索