1. 程式人生 > >javax.servlet.Filter的使用

javax.servlet.Filter的使用

Filters是在請求資源(Servlet或靜態內容)或者響應資源時,也可以在請求和響應同時進行時,執行過濾任務。
Filters通過doFilter方法來執行過濾的。每個過濾都要訪問一個FilterConfig物件,該物件包含了初始引數,要引用的ServletContext對
象。例如,在調入資源時,執行過濾。
Filters是被配置在web.xml配置檔案中的。
一些需要過濾器的情況:
(
1)認證Filter
(
2)日誌和稽核Filter
(
3)圖片轉換Filter
(
4)資料壓縮Filter
(
5)密碼Filter
(
6)令牌Filter
(
7)觸發資源訪問事件的Filter
(
8)XSL/TFilter
(
9)媒體型別鏈Filter
方法列表:
(

1)destory():當Filter從服務中去除時,由servletcontainer來呼叫。在Filter的doFilter()的所有執行緒退出時或在一個時間週期
結束後該方法僅會被呼叫一次。在webcontainer呼叫過該方法後,該filte的r例項將不會再呼叫doFilter()。
該方法提供給Filter一個清除任意資源的時機,這些資源可能是被儲存的(例如,記憶體、檔案控制代碼、執行緒)或確保持久狀態是和在記憶體Filter
的狀態是同步的。
(
2)doFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain):Filter的doFilter方法是
在每次一個請求或響應時被呼叫,來處理過濾鏈最後的客戶端請求資源。FilterChain被傳入到此方法中,允許過濾器將request,response
傳遞到過濾鏈的下一個過濾。
這個方法的典型設計應該是遵循以下的模式:
<1>檢測request
<2>通過特定過濾器對請求資料的內容或頭資訊進行過濾,並重新封裝成request物件
<3>通過特定過濾器對響應資料的內容或頭資訊進行過濾,並重新封裝成response物件
<4>通過chian物件呼叫過濾鏈的下一個過濾器,或不傳遞request/response到過濾鏈的下一個過濾器從而阻擋請求處理。
<5>在過濾鏈的下一個過濾器被呼叫後,直接設定頭資訊到response物件
(
3)init(FilterConfigconfig):當Filter被放入到服務中時,由servletcontainer來呼叫。在例項化Filter後,init
會被呼叫一次。
有兩種情況,容器不會將將Filter放入服務中:
<1>丟擲ServletException時
<2>在容器規定的時間內沒有返回例項