SpringMVC配置文件

一.靜態資源使用web容器默認的servlet進行處理

早期的Spring MVC不能很好地處理靜態資源,所以在web.xml中配置DispatcherServlet的請求映射,往往在映射路徑中以 *.do 、 *.xhtml等方式結尾,從而防止攔截靜態資源請求。這種請求的URL必須是一個帶後綴的URL,無法採用真正的REST風格的URL。優雅的REST風格的資源URL不希望帶 .html 或 .do 等後綴。

如果將DispatcherServlet請求映射配置爲"/",則Spring MVC將捕獲Web容器所有的請求,包括靜態資源的請求,Spring MVC會將它們當成一個普通請求處理,因此找不到對應的處理器將導致錯誤。

如何讓Spring框架能夠捕獲所有URL的請求,同時又將靜態資源的請求轉由Web容器處理。有以下幾種方式:

1.使用Tomcat的defaultServlet來處理靜態資源請求

在web.xml文件中配置使用default servlet處理靜態資源,如

	<servlet-mapping>     
    		<servlet-name>default</servlet-name>    
    		<url-pattern>*.jpg</url-pattern>       
	</servlet-mapping>      
	<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> 

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


2.使用<mvc:default-servlet-handler/>

在springmvc配置文件中添加<mvc:default-servlet-handler/>

    <!-- 配置mvc註解驅動 -->
    <!-- 例如@resquestmapping這類的 -->
    <mvc:annotation-driven />
    <!-- -->
    <mvc:default-servlet-handler/>
這個標籤起作用的前提就是需要我們把靜態資源放在webapp下,而非WEB-INF下,否則還是會無效。


3.在spring3.0.4以後版本提供了<mvc:resources />

<mvc:default-servlet-handler />將靜態資源的處理由Spring MVC框架交給Web容器的默認servlet處理。

而<mvc:resources />更進一步,由Spring MVC框架自己處理靜態資源,並添加一些有用的附加值功能。

首先,<mvc:resources />允許靜態資源放在任何地方,如WEB-INF目錄下、類路徑下等,你甚至可以將JavaScript等靜態文件打到JAR包中。通過location屬性指定靜態資源的位置,由於location屬性是Resources類型,因此可以使用諸如"classpath:"等的資源前綴指定資源位置。

傳統Web容器的靜態資源只能放在Web容器的根路徑下,<mvc:resources />完全打破了這個限制。
其次,<mvc:resources />依據當前著名的Page Speed、YSlow等瀏覽器優化原則對靜態資源提供優化。

你可以通過cacheSeconds屬性指定靜態資源在瀏覽器端的緩存時間,一般可將該時間設置爲一年,以充分利用瀏覽器端的緩存。在輸出靜態資源時,會根據配置設置好響應報文頭的Expires 和 Cache-Control值。

接收到靜態資源的獲取請求時,會檢查請求頭的Last-Modified值,如果靜態資源沒有發生變化,則直接返回303相應狀態碼,提示客戶端使用瀏覽器緩存的數據,而非將靜態資源的內容輸出到客戶端,以充分節省帶寬,提高程序性能。


在springMVC-servlet中添加如下配置:
<mvc:resources location="/,classpath:/META-INF/publicResources/" mapping="/resources/**"/>
以上配置將Web根路徑"/"及類路徑下 /META-INF/publicResources/ 的目錄映射爲/resources路徑。

假設Web根路徑下擁有images、js這兩個資源目錄,在images下面有bg.gif圖片,在js下面有test.js文件,

則可以通過 /resources/images/bg.gif 和 /resources/js/test.js 訪問這二個靜態資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章