1. 程式人生 > >Spring MVC配置不攔截HTML等資源請求

Spring MVC配置不攔截HTML等資源請求

問題

 <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <!--會攔截所有的請求-->
    <url-pattern>/</url-pattern> 
</servlet-mapping>

1.這樣配置的dispatch-servlet會攔截所有請求(除了jsp會由容器預設的Servlet攔截,下面提到的),但是控制器的@RequestMapper(“url”),並沒有所有都滿足。
2.比如./xxpath/xxx.html, xxx.css等,是沒有對應的控制器可以對映的。就會丟掉,對應就成了響應碼就成了404。


解決方法

1.可以修改Spring MVC的攔截範圍
2.Servlet容器有個預設攔截可以配置,其優先於Spring MVC的攔截

基於方法1

①修改web.xml配置檔案中dispatch的的範圍
比如改為REST風格的"/*.do",但是所有請求都要字尾加".do",有點麻煩,不能完全REST。以下兩種<mvc:…>就是Spring MVC提出的很好解決方法。

②保持Spring MVC在 web.xml檔案中的攔截所有的配置, 將攔截到的靜態資源請求交回給default Servlet管理 【推薦】

<mvc:default-servlet-handler
/>

③保持Spring MVC在 web.xml檔案中的攔截所有的配置,二級對映Spring MVC容器部分url
在Spring MVC配置檔案中加入以下需要過濾的目錄檔案資源即可(可以新增多條)

<mvc:resources location="" mapping=""/> 

基於方法2

可以在web.xml檔案中配置Servlet的預設攔截

<servlet-mapping>
   <servlet-name>default</servlet-name>
   <url-pattern>/js/*.js</
url-pattern
>
<url-pattern>/css/*.css</url-pattern> <url-pattern>/testPage/*.html</url-pattern> <url-pattern>/image/*</url-pattern> </servlet-mapping>

這個可以不配置對應的<servlet>…</servlet>
但是必須配在dispatch之前,即如下Spring MVC的dispatch分發請求的Servlet之前

<servlet>
   <servlet-name>dispatcher</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapper>
   <servlet-name>dispatcher</servlet-name>
   ...
</servlet-mapper>