天天看點

spring mvc不能引入js等靜态檔案的解決辦法

spring mvc 靜态資源 404問題(注意 最好不要把靜态檔案放在在web_inf下面,第1,2種方法不能通路,第三種可以通路)

在web.xml配置servlet-mapping的時候,如果url-pattern設定為“/” (如下),很多人都會遇到導入js,css,圖檔等靜态資源出現firefox調試視窗會報出的404錯誤,而你的确也不能通路那些資源

<servlet-mapping>

<servlet-name>dispatcherservlet</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

百度了很久,大緻有4種方法:

<如果沒有解決 可網上說以使用 這個方法試試   就是jsp頁面中導入靜态資源的時候需要用<c:url>标簽

例如:

<%@ 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種方法詳細說明:》

本人使用的是tomcat伺服器,測試的完全可以不用c标簽,直接寫url就可以,

方法1. 修改web.xml檔案,增加對靜态資源的url映射,要加在org.springframework.web.servlet.dispatcherservlet的前面

如:

<servlet-name>default</servlet-name>

<url-pattern>*.js</url-pattern>

<url-pattern>*.css</url-pattern>

在web.xml中添加好配置後,在jsp頁面就可以引用這些靜态資源了

<script type="text/javascript" src="static/js/1.js"></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頁面中引用時需要注意:

方法4 直接在web.xml中設定spring mvc的過濾路徑

 <servlet-name>spring-mvc</servlet-name>

    <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class>

    <load-on-startup>1</load-on-startup><!-- 大于等于0啟動時加載此架構 -->

  </servlet>

  <servlet-mapping>

    <servlet-name>spring-mvc</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>