一:爲什麼會出現處理靜態資源請求失敗的問題
- 優雅的REST風格的資源URL,不希望帶.html或。do等後綴。
- 若將DispatcherServlet請求映射配置爲/,則springMVC將會捕獲WEB容器的所有請求,包括靜態資源的請求,springMVC會將當成一個普通的請求處理,因找不到對應的處理器導致錯誤。
二:解決辦法
- 可以在springMVC的配置文件中配置<mvc:default-servlet-handler/>的方式解決靜態資源的問題
- 將在 SpringMVC 上下文中定義一個 DefaultServletHttpRequestHandler,它會對進入 DispatcherServlet 的 請求進行篩查,如果發現是沒有經過映射的請求,就將該請求交由 WEB 應用服務器默認的 Servlet 處理,如果不是靜態資源的請求,才由 DispatcherServlet 繼續處理
- 一般 WEB 應用服務器默認的 Servlet 的名稱都是 default。若所使用的 WEB 服務器的默認 Servlet 名稱不是 default,則需要通過 defaultservlet-name 屬性顯式指定
三:代碼實現
<!--
將在 SpringMVC 上下文中定義一個 DefaultServletHttpRequestHandler,它會對進入 DispatcherServlet 的 請求進行篩查,
如果發現是沒有經過映射的請求,就將該請求交由 WEB 應用服務器默認的 Servlet 處理,如果不是靜態資源的請求,
才由 DispatcherServlet 繼續處理.
一般 WEB 應用服務器默認的 Servlet 的名稱都是 default。若所使用的 WEB 服務器的默認 Servlet 名稱不是 default,
則需要通過 defaultservlet-name 屬性顯式指定
-->
<mvc:default-servlet-handler/>