Spring MVC中處理靜態資源的多種方法

2021-09-08 19:07:33 字數 1169 閱讀 4117

處理靜態資源,我想這可能是框架搭建完成之後web開發的」頭等大事「了。

如何處理靜態資源的請求呢?

其中resourcehttprequesthandler就是處理靜態資源請求的類,當然如果你願意,也可以自己嘗試寫乙個。

另外,還可以使用mvc命名空間的resources標籤來配置

還有別的方法來處理靜態資源請求嗎?

spring mvc還提供了乙個配置項:mvc:default-servlet-handler

這個標籤對於匹配規則為"/"的dispatcherservlet才生效(因為別的匹配規則一般也不會攔截靜態資源)。它會為defaultservlethttprequesthandler配置上"/**"的攔截規則和最低的匹配優先順序。

另外需要注意的是,這裡尋找容器的defaultservlet是用名字而不是路徑。所以首先要搞清楚容器的defaultservlet的名字, 當然一般主流容器的名字是無需指定的,比如tomcat, jetty, jboss, and glassfish等。若非常用容器,則可能需要手動指定:

這種方式也是依賴於容器的defaultservlet的,那麼我們是否能直接用容器的defaultservlet來處理靜態資源請求,而不是這樣先通過spring mvc來**呢?(相比效能上會好很多),答案是肯定的。

比如我們將資源檔案都放在resouces目錄下,那麼只需要在web.xml中配置:

/resource/*

並將它放在所有servlet的最前面(為了讓它最先匹配),這樣的話效能上應該比較好

但是這樣還會有個問題,就是無法訪問到classpath下的資源檔案,看了tomcat的defaultservlet的配置項,似乎也沒有可以指定目錄的地方。

所以,綜上所述,效能最好的應該是直接利用容器的defaultservlet,讓它最先攔截靜態資源請求,這樣就避免了後續的**等操作,提高了 效能,但是無法訪問classpath下的資源檔案。而通過mvc:resources標籤可以簡單配置匹配規則和資源檔案路徑,應該說是最簡單快捷的一 種方式,當然這大概也是mvc命名空間設計的初衷。

另外,若想結合兩者的話,自己倒是可以嘗試寫乙個servlet來處理,不過估計有難度且麻煩。

SpringMVC 處理靜態資源

springmvc 處理靜態資源 1.為甚麼會有這樣的問題 優雅的 rest 風格的資源url 不希望帶 html 或 do 等字尾 若將 dispatcherservlet 請求對映配置為 則springmvc 將捕獲web 容器的所有請求,包括靜態資源的請求,springmvc 會將他們當成乙個...

Spring MVC 靜態資源處理

spring mvc 靜態資源處理 web.xml中dispatcherservlet的配置如下 springmvcservlet name org.springframework.web.servlet.dispatcherservletservlet class contextconfigloc...

spring mvc 靜態資源處理

spring mvc允許dispatcherservlet 對映為 如此一來就覆蓋了servlet容器預設servlet的對映。但是,我們仍然可以讓servlet容器的預設servlet來處理靜態資源。web.xml中配置 springservlet org.springframework.web....