配置詳解
在沒有特殊要求的情況下,SpringMVC 的中央調度器 DispatcherServlet 的 常使用后輟匹配方式,如寫為*.do 或者 *.action, *.mvc 等,頁面都不能訪問。
可以寫為 /,因為 DispatcherServlet 會將向靜態資源的獲取請求,例如.css、.js、.jpg、.png 等資源的獲取請求,當作是一個普通的 Controller 請求。中央調度器會調用處理器映射器為其查找相應的處理器。當然也是找不到的,所以在這種情況下,所有的靜態資源獲取請求也均會報 404 錯誤。
項目:url-pattern。在項目 primary 基礎上進行修改。
需求:在 index.jsp 頁面中存在一個訪問圖片的鏈接。該項目用于演示將寫為*.do 可以訪問到該圖片,而寫為/,則無法訪問。
A、 在項目中添加圖片
在項目的 WebRoot 下添加一個目錄 images,并在其中添加一張圖片資源。
B、 修改 index 頁面
C、 修改的值
保持的值為 *.do,擴展名方式,圖片會正常顯示。
將的值修改為 / ,則圖片將無法顯示。
的值并不是說寫為/后,靜態資源就無法訪問了。經過一些配置后,該問題也是可以解決的。
在 Tomcat 中,有一個專門用于處理靜態資源訪問的 Servlet – DefaultServlet。其<servlet-name/>為 default。可以處理各種靜態資源訪問請求。該 Servlet 注冊在 Tomcat 服務器的 web.xml 中。在 Tomcat 安裝目錄/conf/web.xml
項目:url-pattern-2。在項目 url-pattern 基礎上修改。
只需要在 springmvc.xml 中添加<mvc:default-servlet-handler/>標簽即可
<mvc:default-servlet-handler/>表示使用 DefaultServletHttpRequestHandler 處理器對象。而該處理器調用了 Tomcat 的 DefaultServlet 來處理靜態資源的訪問請求。如果默認的 servlet名稱不是 default,需要使用屬性 default-servlet-name 指定 servlet 的名稱。
例如:<mvc:default-servlet-handler default-servlet-name=”servlet 名稱” />
Tomcat, Jetty 默認 Servlet 的名字 -- "default"
WebLogic 默認 Servlet 的名字 -- "FileServlet"
WebSphere 默認 Servlet 的名字 -- "SimpleFileServlet"
當然了,要想使用<mvc: …/>標簽,需要引入 mvc 約束
該約束可從 Spring 幫助文檔中搜索關鍵字 spring-mvc.xsd 即可獲取:
docs/spring-framework-reference/htmlsingle/index.html
項目:url-pattern-3。在項目 url-pattern 基礎上修改。
在 Spring3.0.4 版本后,Spring 中定義了專門用于處理靜態資源訪問請求的處理器 ResourceHttpRequestHandler。并且添加了<mvc:resources/>標簽,專門用于解決靜態資源無法訪問問題。需要在 springmvc.xml 中添加如下形式的配置:
location 表示靜態資源所在目錄。當然,這里的目錄包含/WEB-INF/目錄及其子目錄。
mapping 表 示 對 該 資 源 的 請 求 ( 以 /images/ 開 始 的 請 求 , 如 /image/beauty.jpg , /images/car.png 等)。注意,后面是兩個星號**。