優雅REST風格的資源URL不但願帶 .html 或 .do 等後綴.因爲早期的Spring MVC不能很好地處理靜態資源,因此在web.xml中配置DispatcherServlet的請求映射,每每使用 .do 、 .xhtml等方式。這就決定了請求URL必須是一個帶後綴的URL,而沒法採用真正的REST風格的URL。html
若是將DispatcherServlet請求映射配置爲"/",則Spring MVC將捕獲Web容器全部的請求,包括靜態資源的請求,Spring MVC會將它們當成一個普通請求處理,所以找不到對應處理器將致使錯誤。web
如何讓Spring框架可以捕獲全部URL的請求,同時又將靜態資源的請求轉由Web容器處理,是可將DispatcherServlet的請求映射配置爲"/"的前提。因爲REST是Spring3.0最重要的功能之一,因此Spring團隊很看重靜態資源處理這項任務,給出了堪稱經典的兩種解決方案。spring
先調整web.xml中的DispatcherServlet的配置,使其能夠捕獲全部的請求:瀏覽器
<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
經過上面url-pattern的配置,全部URL請求都將被Spring MVC的DispatcherServlet截獲。緩存
在springMVC-servlet.xml中配置
通常Web應用服務器默認的Servlet名稱是"default",所以DefaultServletHttpRequestHandler能夠找到它。若是你全部的Web應用服務器的默認Servlet名稱不是"default",則須要經過default-servlet-name屬性顯示指定:mvc
<mvc:default-servlet-handler default-servlet-name="所使用的Web服務器默認使用的Servlet名稱" />
首先,
其次,
在接收到靜態資源的獲取請求時,會檢查請求頭的Last-Modified值,若是靜態資源沒有發生變化,則直接返回304相應狀態碼,提示客戶端使用瀏覽器緩存的數據,而非將靜態資源的內容輸出到客戶端,以充分節省帶寬,提升程序性能。
在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"訪問這二個靜態資源。假設Web根路徑還擁有"images/bg1.gif"及"js/test1.js",則也能夠在網頁中經過"/resources/images/bg1.gif"及"/resources/js/test1.js"進行引用。