SpringMVC配置前端控制器的路徑問題

在使用SpringMVC時,都須要在web.xml中配置一個前端控制器DispatcherServlethtml

控制器是一個servlet,但這個路徑配置就有不少種,以前都是以擴展名配置的路徑,如*.do,而後再項目中就就*.do的路徑進行訪問。前端

但最近的項目遵循Restful風格,配置的路徑以下web

 

能夠看到配置的路徑爲「/」,因爲以前疑惑上網查,說是/*和/都是攔截全部請求,因而把這裏的路徑改爲/*,以後項目就出先了404資源找不到的問題。jsp

經過後來查閱資料,以本身的理解  /* 和 / 的區別以下spa

  首先咱們瞭解一下servlet的匹配規則3d

    精度匹配>路徑匹配>擴展名匹配>內省匹配 (這裏具體就不舉例了,想了解的同窗能夠自行百度)code

    全部這裏的  /屬於內省匹配模式(TomCat默認有一個這樣的路徑),/*屬於路徑匹配。因此當控制器返回一個結果視圖訪問時,若是配置的爲/*.則SrpingMVC會再次攔截,但因爲找不到相關的控制器,就會報404資源找不到。xml

    若是這裏配置的爲 / ,首先會覆蓋掉Tomcat中默認的,Tomcat默認的是用來處理靜態資源的,好比html,jsp等一些靜態資源。這裏覆蓋掉之後,咱們就要本身考慮靜態資源的處理了。htm

    

  其次我發如今web.xml中又配置了這樣一些路徑,因爲以前覆蓋掉了Tomcat默認的,這裏應該是將一些靜態資源手動調用Tomcat的默認處理器進行處理,可是在這裏面咱們沒有發現jsp頁面,那麼控制器返回的jsp仍是會被 / 攔截進入到SpringMVC中。blog

  因此爲了防止資源找不到報404,在SpringMVC的配置文件中配置了以下的配置信息

 

首先的做用是對進入到SpringMVC的靜態資源進行處理,功能同Tomcat默認的DefaultServlet功能相似

其次這個的做用是當進入到SpringMVC中而且路徑爲 / 時,默認跳轉到/index.html界面,這貌似就是跳轉主頁功能。

最後 是SpringMVC提供處理靜態資源的,詳細用法自行百度。

 

有個疑惑,假如我訪問一個js文件,web.xml裏面配置了*.js交給Tomcat處理(擴展名匹配),DispatcherServlet又配置的是‘/’  (內省匹配),而擴展名優先級大於內省,因此說當我訪問一個JS靜態資源時,是不會進入SpringMVC中的,但這裏又在SpringMVC中配置了一些靜態資源的處理,不知道有什麼用???

 

總結:

  1./*和/均可以攔截全部請求,可是優先級不同,/*的優先級要高於/,這也是爲何配置/*會報資源找不到的問題,由於根本到達不了Tomcat默認的Servlet來處理靜態資源。

  2.網上說的/*攔截擴展名的,/不會攔截帶擴展名的,我以爲這總說法是不對的。仍是要理解servlet的匹配規則。

相關文章
相關標籤/搜索