一、filter-mapping元素
filter-mapping元素用於將filter和servlet或jsp進行關聯,它可以指定一個Filter對哪些URL請求進行攔截,並對該Filter在web.xml中的配置進行相應的映射。filter-mapping元素有以下幾種配置方式:
1.1、通過filter-name配置
<filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/myUrl</url-pattern> </filter-mapping>
通過filter-name指定Filter在web.xml中的名稱,url-pattern指定要攔截的URL請求,此時,myFilter會攔截到所有myUrl的請求。
1.2、通過servlet-name配置
<filter-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/myUrl</url-pattern> </filter-mapping>
通過servlet-name指定要攔截的Servlet,在請求到達該Servlet之前,myFilter會對請求進行攔截。
1.3、通過dispatchers配置
<filter-mapping> <filter-name>myFilter</filter-name> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> </filter-mapping>
通過dispatchers指定攔截類型,dispatcher有以下幾種取值:
- REQUEST:對所有請求進行攔截
- FORWARD:對轉發請求進行攔截
- INCLUDE:對包含其他文件的請求進行攔截
- ERROR:對錯誤處理請求進行攔截
- ASYNC:對非同步請求進行攔截
二、filter-mapping url-pattern
url-pattern用於指定過濾器攔截的URL模式,它支持如下幾種模式:
2.1、精確匹配
<filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/myUrl</url-pattern> </filter-mapping>
精確匹配指定的URL請求,只有當URL請求的完全匹配指定的URL模式時,Filter才會進行過濾。
2.2、目錄匹配
<filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/myDir/*</url-pattern> </filter-mapping>
目錄匹配指定的URL請求,只要URL模式匹配指定目錄下的所有文件,Filter就會進行過濾。這裡的「*」表示只匹配該目錄下的文件,不包含子目錄。
2.3、擴展名匹配
<filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping>
擴展名匹配指定的URL請求,只要URL的擴展名匹配指定的字元串,Filter就會進行過濾。
2.4、默認匹配
<filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/</url-pattern> </filter-mapping>
默認匹配指定的URL請求,僅當沒有其它匹配URL模式時,Filter才會進行過濾。
三、filter-mapping排除
排除指的是某些URL請求不被Filter攔截,可以通過以下方式進行排除:
3.1、通過url-pattern排除
<filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/myUrl/*</url-pattern> <url-pattern>!*.jsp</url-pattern> </filter-mapping>
通過url-pattern指定要排除哪些URL請求,只有URL模式不匹配排除的URL模式時,Filter才會進行過濾。
3.2、通過dispatcher排除
<filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/myUrl</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>!ASYNC</dispatcher> </filter-mapping>
通過dispatcher指定要排除哪些攔截類型的請求,只有請求類型不包含排除類型時,Filter才會進行過濾。
示例代碼:
<filter> <filter-name>myFilter</filter-name> <filter-class>com.example.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/myUrl/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping>
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/248072.html