關於SpringMVC訪問靜態資源的一些個人見解

2021-09-22 02:11:38 字數 3551 閱讀 9588

昨晚臨回宿舍之前遇到乙個訪問靜態資源路徑的問題,研究了一會兒,沒有研究出來。今天一早開啟電腦,螢幕是昨天遺留的問題,越看越想解決它,要不然心裡很不舒服。沒想到這一深入研究,挖掘出以前許多和這相關但沒注意的知識,結果陷入進去了,本來是乙個問題,但逐漸轉變成一小塊知識的問題,就這樣逐漸摸索和排盲,白天的時間很快過去了,雖然感覺自己離最終的答案很近了,可還是沒有乙個很清晰的嚴密回答。晚飯回來,繼續研究,直至寫這篇博文之前,終於搞懂了來龍去脈,特此記錄一下,希望能幫助遇到類似問題的道友,能盡快地解決問題,在有限的時間內去學習更多的知識。

道友們別急,首先我把整個專案的檔案架構列出來,具體問題要根據圖中的內容才能指出。

專案目錄:

圖一

web.xml 中的部分配置

圖二

spring-web.xml部分配置檔案

圖三

controller檔案

圖四

shopoperation.html檔案

圖五

src='../resources/js/common/common.js'
common.js在整個專案中的相對路徑為     resources/js/common/common.js。按照我以前的理解就是下面所寫,

src='resources/js/common/common.js'

我做了乙個實驗,加../發現common.js的請求路徑為:

圖六

不加../發現common.js的請求路徑為:

圖七

細心的道友們可以發現多了圖七比圖六多了乙個/shopdamin目錄,所以沒有訪問到靜態資源js。

在繼續分析講解直接,我先問道友們乙個問題,有沒有人能準確地講出servlet的url-pattern匹配規則?一開始我一臉懵逼,以前只知道用,沒有仔細研究過,這裡給大家推薦一篇博文,給道友們漲漲知識:servlet的url-pattern匹配規則

裡面主要說servlet的url-pattern大概主要有四種規則

1 精確匹配   中配置的項必須與url完全精確匹配。

2 路徑匹配   以「/」字元開頭,並以「/*」結尾的字串用於路徑匹配

3 副檔名匹配  以「*.」開頭的字串被用於副檔名匹配

4 預設匹配  ''/''

匹配順序依次遞減

4、預設匹配,以上都找不到servlet,就用預設的servlet,配置為/

在圖二中,我這裡只定義了預設攔截,也就是等級最低的一種,而在圖三中為靜態資源地訪問定義了一種路徑攔截,它的攔截等級是高於預設攔截的。

下面繼續講解:

我這裡給道友們捋一下 src加了../的 整個shopoperation.html 正確的訪問過程。

首先在瀏覽器位址列中輸入http://localhost:8080/o2o/shopadmin/shopoperation  ,我們的配置檔案中沒有專門為這個路徑配置過攔截,因此,我們通過圖二的預設攔截進行攔截,再通過圖四配置,找到shopoperation.html。翻譯一下:shopoperation.html真實的訪問路徑其實可以理解為:

http://localhost:8080/o2o/shopadmin/web-inf/html/shopoperation.html (看圖三前字尾配置,當然這這只能通過後台**,訪問web-inf檔案),大夥兒注意shopoperation.html檔案其實是在web-inf目錄下的,這後面要提到。

圖八

)結果如圖六所示。

我這裡再給道友們捋一下 src不加../的 整個shopoperation.html 的訪問過程。

首先在瀏覽器位址列中輸入http://localhost:8080/o2o/shopadmin/shopoperation  ,因為圖二配置了預設攔截也就是等級最低的攔截,也就是可以攔截所有的請求,那麼這個訪問位址就會被攔截,通過圖四配置,找到shopoperation.html。翻譯一下:shopoperation.html真實的訪問路徑其實可以理解為:

http://localhost:8080/o2o/shopadmin/web-inf/html/shopoperation.html (看圖三前字尾配置,當然這這只能通過後台**,訪問web-inf檔案),大夥兒注意shopoperation.html檔案其實是在web-inf目錄下的。

圖九

由於我們沒有進一步定義類似

所以訪問只能到shopdamin為止,最終的common.js訪問位址為:http://localhost:8080/o2o/shopadmin/resources/js/common/common.js 即圖七所示。

後記:

寫到這,可以說,昨晚乙個遺留的問題到此可以畫上乙個句號了。想了想,今天花了一整天研究這個,花時間有點長的,這從側面說明自己要學的東西還有很多很多。當然也有朋友問我,花這麼多精力和時間搞這個路徑問題是不是代價有點大,我笑了笑說誰知道呢。不過有一點可以確認,我說服了我自己,今晚可以睡個好覺。不寫了,回宿舍睡覺了。由於時間太晚,書寫可能有點問題,另外文中的觀點和內容僅代表個人觀點,可能有錯誤之處,還請大家諒解,畢竟水平有限~~,謝謝大家觀閱

springMVC訪問靜態資源

web.xml springmvcservlet name org.springframework.web.servlet.dispatcherservletservlet class contextconfiglocationparam name classpath config spring s...

springmvc訪問靜態檔案

如果是springmvc攔截所有請求的這種情況的話,有兩種解決方法。1,在mvc配置檔案中加上這樣的一句話 default servlet handler 2.或者加上下面的這句話 location static 上面這兩種方法都可以。親測有效。但是如果加上 的話,還需要進行下一步的配置。需要在we...

SpringMVC 靜態資源訪問

首先要談在使用web層框架時,都會配置乙個 而 的url pattern有以下幾種 1.攔截所有 jsp js png 全攔截 不建議使用 2.action do 攔截以 action 或者以 do 結尾的請求 3.攔截所有,不包含jsp 包含js png css 建議使用 因此,一般情況下都會使用...