程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 專題——web.xml 中 url-pattern,web.xmlurl-pattern

專題——web.xml 中 url-pattern,web.xmlurl-pattern

編輯:JAVA綜合教程

專題——web.xml 中 url-pattern,web.xmlurl-pattern


一、映射什麼?

一個請求發送到 servlet 容器,servlet 容器會將當前請求的 url 路徑減去 協議、端口號、contextPath,剩下 servletPath 就是用來做 url-pattern 映射的部分。

如:

http://localhost:8080/myservlet/DisplayHeader?method=show

http: 傳輸協議

localhost: 主機地址

8080: 端口號

myservlet: contextPath

DisplayHeader: servletPath

method=show: 參數

所以要做 url-pattern 映射的部分就是 "DisplayHeader" 部分。

二、映射

1.映射規則

(1)精確匹配:在url-pattern標簽中指定一個具體的URL地址,其中不使用任何的通配符,例如:/target.jsp

(2)模糊匹配:在url-pattern標簽中指定一個帶有通配符的URL地址

  <1>前綴匹配:URL地址前面確定,後面使用通配符,例如:/happy/*

  <2>後綴匹配:URL地址後面確定,前面使用通配符,例如:*.jsp,*.jpg

  <3>注意:不能在URL地址中間使用通配符,例如:/happy/*.jsp是不允許的

(3)還有一種:"/"

2.Wrapper :Wrapper 代表一個 Servlet,它負責管理一個 Servlet,包括的 Servlet 的裝載、初始化、執行以及資源回收。

(1)前綴匹配的 servlet 會被丟到 wildcardWrappers 中。

(2)後綴匹配的 servlet 會被丟到 extensionWrappers 中。

(3)"/" 會被丟到 defaultWrapper 中。

(4)其他映射被丟到 exactWrappers 中。

3.優先級的高低

(1)精確匹配,使用 contextVersion 的 exactWrappers

(2)前綴匹配,使用 contextVersion 的 wildcardWrappers

(3)後綴匹配,使用contextVersion的extensionWrappers(tomcat 自動為我們加入處理 .jsp 和 .jspx 路徑)

(4)使用資源文件來處理servlet,使用contextVersion的welcomeResources屬性,這個屬性是個字符串數組(servletPath 如果什麼都不輸入的話,則會先來映射welcomeResources)

(5)使用默認的servlet,使用contextVersion的defaultWrapper

簡單來說:

精確匹配的優先級>前綴匹配(/*)>後綴匹配(*.action)> servletPath 為空(默認會訪問 welcomeResources) > "/"。

三、參考資料

http://www.cnblogs.com/fangjian0423/p/servletContainer-tomcat-urlPattern.html

四、常見問題

1.為什麼 servlet 的 url-pattern 要配置為 "/",而 filter 的 url-pattern 要配置為 "/*"?

"/*" 的優先級較高,對於大部分 url 請求都能進行過濾,甚至我們訪問 index.jsp 這樣的文件都需要走這個映射。對於 servlet 而言,不是希望看到的。

對於 filter 來說,不會像servlet那樣只匹配一個servlet,因為filter的集合是一個鏈,所以只會有處理的順序不同,而不會出現只選擇一個filter,所以它要攔截絕大部分請求,然後由每個匹配的filter進行自主處理。

這個解釋可能還有點不足,歡迎大家補充。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved