首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Tomcat web.xml url-pattern 匹配規則深度解析:源碼級優先級詳解

     編輯:Java 相關知識

Tomcat 根據 org.apache.tomcat.util.http.mapper.Mapper 實現 Servlet 映射規則,優先級從高到低:

  1. 精確匹配:/exact.do → exactWrappers
  2. 路徑前綴匹配:/*、/test/* → wildcardWrappers
  3. 擴展名匹配:*.do、*.jsp → extensionWrappers
  4. 歡迎頁面處理:welcome-file-list → welcomeResources
  5. 默認 Servlet:/ → defaultWrapper

源碼驗證

Mapper.internalMapWrapper() 依次嘗試上述規則,mappingData.wrapper 非空即停止。

實戰驗證案例

<servlet-mapping>
  <servlet-name>ExactServlet</servlet-name>
  <url-pattern>/exact.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>TestAllServlet</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>TestServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
  • /exact.do → ExactServlet(規則 1)
  • /test.do → TestAllServlet(規則 2,/*)
  • /index.jsp → TestAllServlet(規則 2 優先於規則 3 的 *.jsp)
  • / → 歡迎頁面列表(規則 4)或默認 Servlet(規則 5)

Spring MVC 實戰陷阱

  • DispatcherServlet 映射 /* 會攔截 .jsp、靜態資源 → 需配置 <mvc:default-servlet-handler/> 或改用 /
  • / 優先級低於 *.jsp,JSP 正常渲染;/* 優先級高於 *.jsp,JSP 被攔截

總結

映射優先級:**精確 > 前綴 > 擴展 > 歡迎頁 > 默認**。源碼閱讀是理解容器行為的唯一可靠途徑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved