1. 程式人生 > 其它 >DispatcherServlet url-pattern中 /、/*、*.do中的區別與作用

DispatcherServlet url-pattern中 /、/*、*.do中的區別與作用

DispatcherServlet url-pattern中 /、/*、*.do中的區別與作用

"/'表示匹配所有請求(其中包含除.jsp和.jspx外的所有後綴)。
如果不配置靜態資源,它會把匹配所有請求都當做是對控制器的訪問,去掉字尾進行匹配。例如你訪問/main.css會變成/main,這也是造成你引入的.css,.js等靜態資源無法訪問的原因,因為他們都被當做控制器的路徑了。
至於為什麼不匹配.jsp和.jspx,是因為在tomcat的web.xml裡有這樣的配置:


這裡由於*.jsp和*.jspx的精度比"/"更高,所以被JspServlet匹配到了,而不是DispatchServlet(jsp的本質也是servlet,它只是讓返回資料動態載入的html更加方便)

"/*"表示匹配所有請求(包含所有後綴)
這裡*.jsp比"/*"的匹配度低,所以配置後會使.jsp也進入DispatcherServlet,而.jsp既不是控制器路徑也不是靜態資源,所以就算配了靜態資源還是訪問不到,所以這個/*的配置不適用於DispatcherServlet,一般用於過濾器來攔截所有資源

*.do表示匹配所有以.do結尾的請求
這也是比較推薦的一種配置,它只匹配.do結尾的請求,不會匹配到靜態資源,靜態資源可以被直接訪問,省去了配置靜態資源的麻煩

/的意義在於符合restful風格,restful風格的請求不能有後綴,需要像 /user/name這種,需要配置靜態資源:mvc:resources

mvc:default-servlet-handler/或Tomcat的web.xml中配置DefaultServlet

/*的意義在於過濾器攔截所有資源使用,並不適用於DispatcherServlet

*.do適用於DispatcherServlet,免去了配置靜態資源的麻煩,但不適用於restful風格

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian
Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian
TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back