filter作用
從J2EE1.3開始,Servlet2.3規範中加入了對過濾器的支持,實現javax.servlet.Filter接口。過濾器能夠對目標資源的請求、響應進行截取。
Filter-class中指定的自定義過濾器必須繼承javax.servlet.Filter,且必須實現下面3個方法:
init()方法負責初始化,一般情況下讀取配置文件中的init-param參數值。
doFilter()負責過濾的業務邏輯,且能通過chain.doFilter()交給下一個控制器。
destroy()方法負責銷燬資源。
filter工作方式
第一種:request過濾器。只有直接訪問該目標資源時該過濾器纔會起作用。
第二種:forward過濾器。對轉發到目標資源的請求過濾。
第三種:include過濾器。
在JSP頁面中的動作:<jsp:include page=.......
在Java代碼中的動作:request.getRequestDispatcher
("....").include
注意:如果目標資源1通過<%@ include file="目標資源2"%指令,這時此過濾器不工作。
第四種:error過濾器。配置了過濾器對錯誤頁面進行過濾,正常請求不會攔截,當出現錯誤的時候,會跳轉到改過濾器。
filter調用順序
在web.xml中過濾器的調用順序,是由<filter-mapping/>元素的定義位置來決定的,哪個filter的<filter-mapping/>元素在前面則哪個filter首先被調用。
filter的作用範圍(dispatcher)
Filter的作用範圍是由dispatcher屬性來指定,該屬性默認值是request。
Dispatcher屬性含義是:該過濾器對哪些途徑來的資源來進行過濾。這些途徑可以是請求、轉發、包含、聲明式錯誤。
<filter/>標籤
<filter-name/>指定Filter的名字,方便引用。
<filter-class/>指定Filter的實現類。
<filter-mapping/>標籤
<filter-name/>引用的Filter名字。
<url-pattern/>指定Filter負責攔截的URL地址。
<dispatcher/>指定Filter作用範圍。
<url-pattern/>匹配規則
精確路徑匹配優先、最長路徑匹配優先、擴展匹配。
在web.xml文件中,以下語法用於定義映射:
1.以”/”開頭和以”/*”結尾的,是用來做路徑映射的
2.以前綴”*.”開頭的,是用來做擴展映射的。
3.只有”/”的,是用來定義default servlet映射的。
4.剩下的都是用來定義詳細映射的。