1.filter的簡介
filter是對客戶端訪問資源的過濾,符合條件放行,不符合條件不放行,並且可以對目 標資源訪問前後進行邏輯處理
2.快速入門
步驟:
1)編寫一個過濾器的類實現Filter接口
2)實現接口中尚未實現的方法(着重實現doFilter方法)
3)在web.xml中進行配置(主要是配置要對哪些資源進行過濾)
3.Filter的API詳解
(1)filter生命週期及其與生命週期相關的方法
Filter接口有三個方法,並且這個三個都是與Filter的生命相關的方法
init(Filterconfig):代表filter對象初始化方法 filter對象創建時執行
doFilter(ServletRequest,ServletResponse,FilterCha):代表filter執行過濾的核心方法,如果某資源在已經被配置到這個filter進行過濾的話,那麼每次訪問這個資源都會執行doFilter方法,對象FilterCha的doFilter(ServletRequest,ServletResponse)方法把請求傳到後面的資源中(可以是Filter也可以是Servlet)。
destory():代表是filter銷燬方法 當filter對象銷燬時執行該方法
Filter對象的生命週期:
Filter何時創建:服務器啓動時就創建該filter對象
Filter何時銷燬:服務器關閉時filter銷燬
(2)Filter的AP詳解
1)init(FilterConfig)
其中參數config代表 該Filter對象的配置信息的對象,內部封裝是該filter的配置信息。
2)destory()方法
filter對象銷燬時執行
3)doFilter方法
doFilter(ServletRequest,ServletResponse,FilterChain)
其中的參數:
ServletRequest/ServletResponse:每次在執行doFilter方法時 web容器負責創建一個request和一個response對象作爲doFilter的參數傳遞進來。該request個該response就是在訪問目標資源的service方法時的request和response。
FilterChain:過濾器鏈對象,通過該對象的doFilter方法可以放行該請求
4.Filter的配置
<filter>
<filter-name>QuickFilter2</filter-name>
<filter-class>cn.zsl.web.filter.QuickFilter2</filter-class>
</filter>
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>cn.zsl.web.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>QuickFilter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
url-pattern配置時
1)完全匹配 /sertvle1
2)目錄匹配 /aaa/bbb/* ----最多的
/user/:訪問前臺的資源進入此過濾器
/admin/:訪問後臺的資源時執行此過濾器
3)擴展名匹配 *.abc *.jsp
注意:url-pattern可以使用servlet-name替代,也可以混用
<filter-mapping>
纔是註冊攔截器,因此<filter-mapping>
會影響攔截器的先後順序。
dispatcher:訪問的方式(瞭解)
REQUEST:默認值,代表直接訪問某個資源時執行filter
FORWARD:轉發時才執行filter
INCLUDE: 包含資源時執行filter
ERROR:發生錯誤時 進行跳轉是執行filter
5.總結Filter的作用?
1)公共代碼的提取
2)可以對request和response中的方法進行增強(裝飾者模式/動態代理)
3)進行權限控制