DispatcherServlet url-pattern中 /、/*、*.do中的區別與作用
阿新 • • 發佈:2021-10-03
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
/*的意義在於過濾器攔截所有資源使用,並不適用於DispatcherServlet
*.do適用於DispatcherServlet,免去了配置靜態資源的麻煩,但不適用於restful風格
TRANSLATE with x English TRANSLATE with EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back