1. 程式人生 > >SpringMVC之靜態資源對映

SpringMVC之靜態資源對映

優雅REST風格的資源URL不希望帶 .html.do 等字尾,由於早期的Spring MVC不能很好地處理靜態資源,所以在web.xml中配置DispatcherServlet的請求對映,往往使用*.do*.xhtml等方式。這就決定了請求URL必須是一個帶字尾的URL,而無法採用真正的REST風格的URL。

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

如何讓Spring框架能夠捕獲所有URL的請求,同時又將靜態資源的請求轉由Web容器處理,是可將DispatcherServlet的請求對映配置為”/”的前提。由於REST是Spring3.0最重要的功能之一,所以Spring團隊很看重靜態資源處理這項任務,給出了堪稱經典的兩種解決方案。

先調整web.xml中的DispatcherServlet的配置,使其可以捕獲所有的請求:

<servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name
> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <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截獲。

方法1、採用<mvc:default-servlet-handler />

<mvc:default-servlet-handler />

在spring-mvc.xml中配置<mvc:default-servlet-handler />後,會在Spring MVC上下文中定義一個DefaultServletHttpRequestHandler,它會像一個檢查員,對進入DispatcherServlet的URL進行篩查,如果發現是靜態資源的請求,就將該請求轉由Web應用伺服器預設的Servlet處理,如果不是靜態資源的請求,才由DispatcherServlet繼續處理。

使用一個servlet來處理靜態資源。若我們的資源放置在webapps資料夾下的resources資料夾中,那麼我們可以用名字為default的servlet來處理靜態資源。因此我們還需要在上述web.xml配置的基礎上加上以下配置:

<servlet-mapping>  
    <servlet-name>default</servlet-name>  
    <url-pattern>resources/*</url-pattern>  
</servlet-mapping>  

這表示default的servlet會處理url中為resources/*的對應的請求。這樣,當你把你的image,css以及其他檔案放在resources檔案中時,spring就可以找到它啦。

一般Web應用伺服器預設的Servlet名稱是”default”,因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web應用伺服器的預設Servlet名稱不是”default”,則需要通過default-servlet-name屬性顯示指定:

<mvc:default-servlet-handler default-servlet-name="所使用的Web伺服器預設使用的Servlet名稱" />

方法2、採用<mvc:resources />(推薦)

<mvc:default-servlet-handler />將靜態資源的處理經由Spring MVC框架交回Web應用伺服器處理。而<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/**"/><mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/css/**" location="/css/" />

以上配置將Web根路徑”/”及類路徑下 /META-INF/publicResources/ 的目錄對映為/resources路徑。假設Web根路徑下擁有images、js這兩個資源目錄,在images下面有bg.gif圖片,在js下面有test.js檔案,則可以通過 /resources/images/bg.gif 和 /resources/js/test.js 訪問這二個靜態資源。

假設WebRoot還擁有images/bg1.gif 及 js/test1.js,則也可以在網頁中通過 /resources/images/bg1.gif 及 /resources/js/test1.js 進行引用。

相關推薦

SpringMVC靜態資源對映

優雅REST風格的資源URL不希望帶 .html 或 .do 等字尾,由於早期的Spring MVC不能很好地處理靜態資源,所以在web.xml中配置DispatcherServlet的請求對映,往往使用*.do、*.xhtml等方式。這就決定了請求URL必須是

SpringBoot——web開發靜態資源對映

1、通過/webjars/**請求靜態資源 SpringMVC的相關配置都在WebMvcAutoConfiguration類中,在該類中有一處新增資源對映: public void addResourceHandlers(ResourceHandlerRegistry r

SpringMVC靜態資源無法訪問

對於添加了springMVC攔截器後無法訪問靜態檔案的情況,有三種解決辦法,可參考:http://www.cnblogs.com/banning/p/6195072.html我專案中用的第一種方案,且靜態檔案全在/WEB-INF/public/,故配置如下:springmvc

SpringMVC靜態資源訪問

web.xml中的DispatcherServlet對應的<url-pattern>/</url-pattern>攔截了所有請求,靜態資源也無法訪問。 有的靜態資源是需要限制訪問的,但有的靜態資源(如:css樣式檔案和js檔案、頁面用到的圖片)我們是

JavaEE開發SpringMVC中的靜態資源對映及伺服器推送技術

在上篇部落格中,我們聊了《》。本篇部落格我們繼續的來聊SpringMVC的東西,下方我們將會聊到js、css這些靜態檔案的載入配置,以及伺服器推送的兩種實現方式。當然我們在伺服器推送時,會用到JQuery的東西,所以我們先聊一下如何載入靜態資原始檔,然後我們再聊如何實現伺服器推送。 下方給出了兩種實現伺服器推

【SpringBoot學習路】10.Web開發靜態資源對映規則

轉載宣告:商業轉載請聯絡作者獲得授權,非商業轉載請註明出處.原文來自 © 呆萌鍾【SpringBoot學習之路】10.Web開發之靜態資源的對映規則  簡介 使用SpringBoot 建立SpringBoot應用,選中我們需要的模組; S

SpringBoot簡明教程Web檢視層(一):WebJars及靜態資源對映規則

SpringBoot簡明教程之檢視層(一):靜態資源對映規則及WebJars的使用 文章目錄 SpringBoot簡明教程之檢視層(一):靜態資源對映規則及WebJars的使用 專案建立 靜態資源對映規則 靜態資源對映

96. Spring Boot靜態資源版本對映(解決js/css快取問題)

我們在之前有一篇文章中講過【處理靜態資源】,但是在實際開發中,我們會發現我們所瞭解到的知識遠遠不夠我們使用,今天這節就是在實際開發當中對碰到的問題進行一定的講解和解決。        問題的提出:我們對於我們編寫的js和css檔案,經常會做一些改變,由於瀏覽器快取,使用者本

SpringMVC靜態資源對映配置

SpringMVC訪問靜態資源 在SpringMVC中常用的就是Controller與View。但是我們常常會需要訪問靜態資源,如html,js,css,image等。 預設的訪問的URL都會被DispatcherServlet所攔截,但是我們希望靜態資源可以直接訪

springMVC學習--3 靜態資源對映

由於Servlet的攔截作用(servlet-mapping子元素的對映模式),一般無法直接訪問靜態資源。為了直接訪問js、css、圖片等靜態資源,在對配置類新增@EnableWebMvc基礎上,將配置類繼承自WebMvcConfigurerAdapter類,重

SpringMVC在做靜態資源對映的時候需要注意的問題

發現問題 最近在開發一個小網站,需要支援在頁面上播放視訊資源(暫時沒考慮流媒體伺服器神馬的,能正常播放就行)。於是在前端使用了HTML5的video標籤。並且配合projekktor播放器來實現。因為還在開發階段,視訊資源的對映就直接交給SpringMVC本身

springmvc中的靜態資源對映配置

web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://j

SpringMVC訪問靜態資源

and ota 正常 文件中 映射 spring hand blog -- 在SpringMVC的配置文件中加上 <!-- SpringMVC會將靜態資源的請求當成映射請求,加上這個配置就可以通過地址欄訪問請求資源 ,這時正常的請求就不能訪問了 所以必須有&

SpringMVC攔截靜態資源的處理辦法

gmv css 無法 ring 攔截 配置 無法加載 app htm SpringMVC攔截靜態資源導致 JS CSS 無法加載 可以在配置文件中加入以下代碼 <mvc:resources location="/statices/" mapping="/

深入 Spring 系列靜態資源處理

extend ada tst mar 找到 方法 rman 依賴 1-43 1. 背景 前一段時間,WebIDE 開源的過程中,無意間接觸到 webjars,覺得比較有趣,於是研究並整理了一下。 webjars 是將前端的庫(比如 jQuery)打包成 Jar 文件,然

SpringBoot學習_webjars和靜態資源對映規則

SpringBoot簡介 使用SpringBoot 建立SpringBoot應用,選中我們需要的模組; SpringBoot已經預設將這些場景配置好了,只需要在配置檔案中指定少量配置就可以執行起來 自己編寫業務程式碼就可以了 自動配置原理 xxxxAu

springmvc訪問靜態資源,以及相對路徑,絕對路徑問題.

一般情況下,在web工程裡,css js png jpg 這類資原始檔,由瀏覽器發起請求,由 tomcat、jetty、nginx 這類程序直接接管,類似於 jfinal、Struts、spring mvc 框架都不會去幹預. 而 WEB-INF 目錄下面由於有 jar 包、配置檔案等需要被保護的檔案,所以

SpringBoot web開發-靜態資源對映規則

1 Hello World 如何建立一個SpringBoot web專案我這裡就不多贅述了,我們先看看如何傳送一個Hello World 請求把: 建立一個HelloController @RestController public class HelloCon

SpringBoot——web開發靜態資源引入

1、雖說SpringBoot為我們提供了很多可以放置靜態資源的資料夾,但靜態頁面(html)最好放在templates資料夾下,因為放在該資料夾下才能得到模板引擎的解析,放在其他靜態資原始檔夾下則不能得到模板引擎的解析,這樣就無法使用模板引擎的強大功能了 2、假如在publ

SpringBoot學習-webjars和靜態資源對映規則

SpringBoot學習-webjars和靜態資源對映規則 前言 1-以前我們在IDEA中建立一個專案,新增web依賴包,我們現在是一個web應用,應該在man目錄下面有一個webapp資料夾,將所有的頁面都放在這裡,這是我們以前的做法。 2-現在我們建立的這個專案中,沒有這個webapp目錄,但是Sp