在 web.xml 中使用 filter-mapping、servlet-mapping 節點下的子節點 url-pattern 配置對映。
Pattern 匹配規則
精確匹配
<servlet-mapping>
<servlet-name>indexServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
同時請求 URL 為 /index,這時就是精確匹配。
副檔名匹配
以“*.”開頭的字串被認為是副檔名匹配。
<servlet-mapping>
<servlet-name>indexServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
此時任何以 .action 結尾的 URL (不包括引數部分)就會匹配這條規則。
路經匹配
以“/”字元開頭,並以“/*”結尾的字串用於路徑匹配。
<servlet-mapping>
<servlet-name>adminServlet</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>
此時任何以 /admin/ 開頭的 URL (不包括引數部分)就會匹配這條規則。
路徑匹配和副檔名匹配不能同一個 pattern 中使用。
匹配優先順序
優先順序從高到底分別是:精確匹配 > 路徑匹配 > 副檔名匹配,其中長路經優先順序高於短路經。
匹配例子
ServletA | ServletB | 請求URL | 匹配結果 | 備註 |
---|---|---|---|---|
/index | /* | /index | ServletA | 精確匹配高於路徑匹配 |
/admin/* | /admin/user/* | /admin/user/index | ServletB | 長路徑匹配高於短路經 |
*.action | /* | /index.action | ServletB | 路徑匹配高於副檔名匹配 |
特殊 Pattern
特殊 Pattern 有著不同的特殊指代,並且時常在配置 Spring, SpringMVC 框架時使用。
先說兩個概念:
- 預設 Servlet:容器自帶的處理靜態資源、列出目錄、檔案下載的 Servlet;
- JSP Servlet:處理 jsp 請求的Servlet。
下面是特殊 Pattern 的用法:
/*
/*
覆蓋所有其他 Servlet,包括預設 Servlet 和 JSP 處理的Servlet,使請求無法到達他們兩者,造成功能異常。一般之用作Filter配置,可以對所有請求進行過濾。
/
/
覆蓋預設 Servlet,處理沒有匹配到任何規則的請求,常用作 MVC 分發控制器的對映。
空白字串
空白字串的規則匹配 webapp 的根目錄,和
完結
特殊 Pattern 部分寫得比較零散,讀者可以參考英文連結。
參考連結
- https://stackoverflow.com/questions/4140448/difference-between-and-in-servlet-mapping-url-pattern