servlet的url pattern匹配規則

2021-10-04 10:44:29 字數 3899 閱讀 1229

servlet容器中的匹配規則既不是簡單的通配,也不是正規表示式,而是特定的規則。所以不要用萬用字元或者正規表示式的匹配規則來看待servlet的url-pattern

servlet2.5開始,乙個servlet可以使用多個url-pattern規則,標籤宣告了與該servlet相應的匹配規則,每個標籤代表1個匹配規則;

url-pattern對映匹配過程是有優先順序的

而且當有乙個servlet匹配成功以後,就不會去理會剩下的servlet了

1 精確匹配

中配置的項必須與url完全精確匹配。

>

>

myservletservlet-name

>

>

/user/users.htmlurl-pattern

>

>

/index.htmlurl-pattern

>

>

/user/adduser.actionurl-pattern

>

>

當在瀏覽器中輸入如下幾種url時,都會被匹配到該servlet

2 路徑匹配

以「/」字元開頭,並以「/*」結尾的字串用於路徑匹配

>

>

myservletservlet-name

>

>

/user/*url-pattern

>

>

路徑以/user/開始,後面的路徑可以任意。比如下面的url都會被匹配。

3 副檔名匹配

以「*.」開頭的字串被用於副檔名匹配

>

>

myservletservlet-name

>

>

*.jspurl-pattern

>

>

*.actionurl-pattern

>

>

則任何擴充套件名為jsp或action的url請求都會匹配,比如下面的url都會被匹配

4 預設匹配

>

>

myservletservlet-name

>

>

/url-pattern

>

>

注意:在tomcat中預設有預設匹配,預設匹配的servlet為defaultservlet(它在tomat的安裝目錄下的conf/web.xml中有定義。),在tomcat中訪問靜態資源時,便是在通過預設的預設匹配處理。

詳情請閱讀大佬的文章:

預設匹配,以上都找不到servlet,就用預設的servlet,配置為/1. 路徑匹配和副檔名匹配無法同時設定

匹配方法只有三種,要麼是路徑匹配(以「/」字元開頭,並以「/」結尾),要麼是副檔名匹配(以「.」開頭),要麼是精確匹配,三種匹配方法不能進行組合,不要想當然使用萬用字元或正則規則。

/user/*.action是非法的,另外注意:/aa/*/bb是精確匹配,合法,這裡的*不是通配的含義

2. "/*「和」/"含義並不相同

/*」屬於路徑匹配,並且可以匹配所有request,由於路徑匹配的優先順序僅次於精確匹配,所以「/*」會覆蓋所有的副檔名匹配,很多404錯誤均由此引起,所以這是一種特別惡劣的匹配模式,一般只用於filter的url-pattern

/」是servlet中特殊的匹配模式,切該模式有且僅有乙個例項,優先順序最低,不會覆蓋其他任何url-pattern,只是會替換servlet容器的內建default servlet ,該模式同樣會匹配所有request

tomcat在%catalina_home%\conf\web.xml檔案中配置了預設的servlet,配置**如下

>

>

defaultservlet-name

>

>

org.apache.catalina.servlets.defaultservletservlet-class

>

>

>

debugparam-name

>

>

0param-value

>

init-param

>

>

>

listingsparam-name

>

>

falseparam-value

>

init-param

>

>

1load-on-startup

>

servlet

>

>

>

jspservlet-name

>

>

org.apache.jasper.servlet.jspservletservlet-class

>

>

>

forkparam-name

>

>

falseparam-value

>

init-param

>

>

>

xpoweredbyparam-name

>

>

falseparam-value

>

init-param

>

>

3load-on-startup

>

servlet

>

>

>

defaultservlet-name

>

>

/url-pattern

>

>

>

>

jspservlet-name

>

>

*.jspurl-pattern

>

>

*.jspxurl-pattern

>

>

對映的url

對應的servlet

/hello

servlet1

/bbs/admin/*

servlet2

/bbs/*

servlet3

*.jsp

servlet4

/servlet5

實際請求對映的結果:

去掉上下文路徑的剩餘路徑

處理請求的servlet

/hello

servlet1

/bbs/admin/login

servlet2

/bbs/admin/index.jsp

servlet2

/bbs/display

servlet3

/bbs/index.jsp

servlet3

/bbs

servlet3

/index.jsp

servler4

/hello/index.jsp

servlet4

/hello/index.html

servlet5

/news

servlet5

Servlet學習 servlet的生命週期

servlet介面中定義了作為乙個servlet在整個生命週期中應該擁有三個階段 1,初始化 2,服務 3,銷毀 servlet的生命週期是由容器管理的 servlet的生命週期 簡化版 適用於筆試的時候 1,servlet的生命週期是由容器管理的 這句話非常重要 2.他分別經歷三個階段 初始化 服...

Servlet入門 servlet路徑問題

1.servlet路徑 url pattern 作用 將乙個請求網路位址和servlet類建立乙個對映關係 servlet可以對映多個url 例如 myservlet com.test.myservlet myservlet mmmyservlet kk2.url對映模式 配置 url位址取值可以是...

Servlet高階應用 Servlet與快取

一 設定快取檔案的有效日期 重點方法 httpservletrequest類 1 string getrequesturi 獲取客戶端位址列的路徑值 httpservletresponse類 2 void setdateheader string name,long endtime name 對應的...