SpringMVC對於靜態資源多處理

2021-08-25 11:42:01 字數 1359 閱讀 7357

**:

今天在學習springmvc的時候想用html而不用jsp實現頁面,但是像平常一樣配置好controller後一直是404找不到html頁面,同時internalresourceviewresolver預設是加「根目錄」字首和「.jsp」字尾,所以最後變成了…/demo/name.html.jsp,google一下找到了問題原因,總結一下。

@override

public

void

addresourcehandlers(resourcehandlerregistry registry)

當請求http://localhost:8083/resource/1.png時,會把/web-inf/static/1.png返回。注意:這裡的靜態資源是放置在web-inf目錄下的。

用法:

@override

public

void

configuredefaultservlethandling(defaultservlethandlerconfigurer configurer)

此時會註冊乙個預設的handler:defaultservlethttprequesthandler,這個handler也是用來處理靜態檔案的,它會嘗試對映/*。當dispatcherservelt對映/時(/ 和/*是有區別的),並且沒有找到合適的handler來處理請求時,就會交給defaultservlethttprequesthandler 來處理。注意:這裡的靜態資源是放置在web根目錄下,而非web-inf下

可能這裡的描述有點不好懂(我自己也這麼覺得),所以簡單舉個例子,例如:在webroot目錄下有乙個:1.png 我們知道servelt規範中web根目錄(webroot)下的檔案可以直接訪問的,但是由於dispatcherservlet配置了對映路徑是:/ ,它幾乎把所有的請求都攔截了,從而導致1.png 訪問不到,這時註冊乙個defaultservlethttprequesthandler 就可以解決這個問題。其實可以理解為dispatcherservlet破壞了servlet的乙個特性(根目錄下的檔案可以直接訪問),defaultservlethttprequesthandler是幫助回歸這個特性的。

問: /和/*有什麼區別?

答: /會攔截除了jsp以外的所有url,/* 會攔截所有url,包括jsp。例如:在webroot下面有乙個test.jsp,當dispatcherservlet 配置對映/ 時,瀏覽器輸入:http://localhost:8083/test.jsp這個jsp是可以直接訪問的,並且不經過dispatcherservlet,而當dispatcherservlet 配置對映/* 時,這個請求就會被dispatcherservlet 攔截。

SpringMVC 配置靜態資源

如何你的dispatcherservlet攔截 do這樣的url,就不存在訪問不到靜態資源的問題。如果你的dispatcherservlet攔截 攔截了所有的請求,同時對 js,jpg的訪問也就被攔截了。目的 可以正常訪問靜態檔案,不要找不到靜態檔案報404。方案一 啟用tomcat的default...

springMVC訪問靜態資源

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

spring mvc靜態資源放行

1,全部資源放行 2,選擇部分資源放行 以上倆種之前要注意先配置 方式二 在web.xml中放行 方法一 配置前段 放行 console org.springframework.web.servlet.dispatcherservlet contextconfiglocation classpath...