web.xml中url-pattern的/和/*的區別:
url-pattern:指定相對於Servlet的URL的路徑。該路徑相當於web應用程序上下文的根路徑。<servlet-mapping>將URL模式映射到某個Servlet,即該Servlet處理的URL。
<url-pattern>/</url-pattern>可以匹配所有的url:路徑型的和後綴型的url(包括/query,.jsp,.js和.html等),一般用於過濾器。
<url-pattern>/</url-pattern>主要用於攔截靜態資源。會替換servlet容器中默認的servlet
我們看到 /* 對應的Servlet會被丟到wildcardWrappers中 會匹配*.jsp,會出現返回jsp視圖時再次進入spring的DispatcherServlet 類,導致找不到對應的controller所以報404錯。
*. 會被丟到extensionWrappers中
/ 會被丟到defaultWrapper中 不會匹配到.jsp,即:.jsp不會進入spring的 DispatcherServlet類 。
其他的映射都被丟到exactWrappers中
規則1:精確匹配,使用contextVersion的exactWrappers
規則2:前綴匹配,使用contextVersion的wildcardWrappers
規則3:擴展名匹配,使用contextVersion的extensionWrappers
規則4:使用資源文件來處理servlet,使用contextVersion的welcomeResources屬性,這個屬性是個字符串數組
規則7:使用默認的servlet,使用contextVersion的defaultWrapper