1. 程式人生 > >Servlet路徑匹配以及靜態資源路徑訪問

Servlet路徑匹配以及靜態資源路徑訪問

問題由來,為什麼SpringMvc中的DispatcherServlet中可以用/,也可以用/*, 這兩個有什麼區別。

先說結論:“/*”的優先順序比副檔名匹配(如.jsp)高,而“/” 的優先順序比副檔名匹配(如.jsp)低。

我們知道一個路徑(url-pattern)只能匹配一個servlet,不像filter,只要能匹配的路徑都可以過濾。
**那就說下URL匹配的優先順序,從高到低:
1.精確匹配:即exact.do,明確的路徑。
2.萬用字元匹配:即”/*”,
3.副檔名匹配:.jsp, .do之類的
4.預設的servlet,也即是“/”. defaultwapper。**

那為什麼我們沒有配置“.jsp”,為什麼會這個呢,那是因為Tomcat會自動加入副檔名“

.jsp”導致的。
這就是為什麼我們在配置DispatcherServlet中用“/”,可以訪問jsp,而不能訪問其他的靜態資源的原因如“.html”,“.js”之類的。

那麼問題來了,我們如何訪問靜態資源:
1.啟用Tomcat的defaultServlet來處理靜態檔案

<servlet-mapping>   
<servlet-name>default</servlet-name>  
<url-pattern>檔案路徑可以自己配置(如*.jpg)</url-pattern>     
</servlet-mapping>

這個處理不會進入到Spring, 所以他的效率是最高的

2.用Spring中的配置檔案

<!-- 對靜態資原始檔的訪問 -->
<mvc:resources mapping="/images/**" location="/images/" />  

也可以對classpath路徑下的靜態資源進行訪問
這裡寫連結內容