default-servlet-handler不生效緣由,springmvc靜態資源攔截方案比較

springmvc爲何要攔截靜態資源?


簡單來講,爲了請求的url不帶相似*.action,*.do,好比http://localhost:8080/system/index.action,spring團隊統一風格,而web項目配置的web.xml中,全部請求都必須走過DispatcherServlet,固然就包括了靜態資源,好比http://localhost:8080/html/index.html,爲了解決這個問題,spring給了兩種方案,下面咱們一塊兒來討論下兩種方案的使用和區別,給新手同窗們一個很自白,清晰的認識!css


解決辦法


說解決辦法以前,咱先來聊下web項目的結構,以下圖所示,你們能夠看到默認webapp下有個WEB-INF文件夾,這個文件夾是提高文件安全級別的,若是不設置,是訪問不到的,因此你們通常看到的資源文件(jsp,css,jss)都在WEB-INF文件夾下。html

image.png

解決辦法1:

<mvc:default-servlet-handler />

若是項目是這樣配置的,你訪問不到WEB-INF/css/下的文件,由於springmvc上下文定義了一個DefaultServletHttpRequestHandler用於處理靜態文件的,他作的工做是轉發給Spring默認處理器DispatcherServlet,DispatcherServlet能處理webapp下沒有權限目錄文件,它不能處理WEB-INF文件夾,也就是說你配置了<mvc:default-servlet-handler />,你可以訪問html下的文件,可是你訪問不了WEB-INF/css/下的文件,這多是文件夾權限緣由,根據官方文檔說明,這樣配置能夠與解決方法2共存。下面咱們來看看方法2。web

解決辦法2:

<mvc:resources mapping="/css/**" location="WEB-INF/css/" />

location:對應是根路徑spring

mapping:映射是訪問路徑安全

經過http://localhost:8080/css/index.css就能夠訪問到被攔截的資源了。這種方式能解決方法1的侷限狀況。mvc


總結


作個總結吧,我推薦這種方式2來解決訪問靜態資源攔截問題,我以爲方法1能夠不寫,就按方法2作配置,夠用了。方法2可能配置的多一些,可是看起來比較清晰,更容易理解。謝謝童鞋們的觀看,若是喜歡或有疑惑,請點贊和留言哦!我是叫練,邊叫邊練。app

相關文章
相關標籤/搜索