回顧一下web.xml中配置DiepatcherServlet
<!-- 配置DispatcherServlet --> <servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <!-- 所有資源都要經Dispatcher處理 --> <url-pattern>/</url-pattern> </servlet-mapping>
配置好后,新建mvc-servlet.xml,在該xml文件中啟動mvc注解,啟動包的掃描,配置視圖解析器等操作,即可實現SpringMVC注解方式的使用。
但這里會出現一個問題,注意配置DispatcherServlet時url-pattern中的路徑為/,表示所有的請求都要經DispatcherServlet截獲,並且經處理器處理后在Controller中執行路徑對應的方法;但是諸如媒體資源、JS文件、CSS文件等也帶有路徑的資源也會被當做請求路徑處理,然而我們並沒有在Controller中設置路徑。
比如我們在JSP中想顯示一幅圖片:
<img alt="加載失敗" src="images/1.jpg">
如果配置了上面的DispatcherServlet,這時就會報警告信息:
警告: No mapping found for HTTP request with URI [/web02/images/1.jpg] in DispatcherServlet with name 'mvc'
因此我們需要將媒體資源、js文件、css文件等靜態資源過濾掉。下面介紹幾種方法:
(一)在mvc-servlet.xml文件中添加
<!-- 過濾靜態資源 --> <mvc:default-servlet-handler/>
即可過濾掉靜態資源,該標簽有個默認參數default-servlet-name="default",該參數指定了一個名為default的servlet,該servlet在tomcat發布位置的conf目錄的web.xml(該xml文件作用於所有的web項目,類似於Java中的全局變量。所以在單個項目的xml文件中也可以引用該default servlet)文件中找到,這里引述該servlet的注釋:
<!-- The default servlet for all web applications, that serves static --> <!-- resources. It processes all requests that are not mapped to other --> <!-- servlets with servlet mappings (defined either here or in your own --> <!-- web.xml file). -->
可見default servlet就是用來過濾靜態資源的。
(二)在web.xml中添加
<!-- 過濾靜態資源 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping>
這里的uer-pattern可設置多個,每個對應一個格式的靜態資源。
(三)在mvc-servlet.xml文件中添加:
<!-- 過濾靜態資源 --> <mvc:resources location="/WEB-INF/images/" mapping="/images/**"/> <mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
當發現標簽中有/images/為前綴的路徑,解析器就將/images/替換為/WEB-INF/images/尋找資源。但瀏覽器中的資源路徑還是mapping中的路徑。