Filter

1、簡介html

  Filter也稱之爲過濾器,它是Servlet技術中最激動人心的技術,WEB開發人員經過Filter技術,對web服務器管理的全部web資源:例如Jsp,Servlet,靜態圖片文件或靜態html文件進行攔截,從而實現一些特殊的功能。例如實現URL級別的權限訪問控制、過濾敏感詞彙、壓縮相印信息等一些高級功能。java

  Servlet API中提供了一個Filter接口,開發web應用時,若是編寫的Java類實現了這個接口,則把這個java類稱之爲過濾器Filter。web

  Filter接口共定義了以下方法:服務器

  destroy()、doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)、init(FilterConfig filterConfig);app

2、filter在開發中的常見應用spa

  一、filter能夠在目標資源執行以前,運行權限檢查,檢查用戶有無權限。選擇是否放行。代理

  二、filter能夠在放行以前,對request和response進行預處理,從而實現一些全局性的設置。xml

  三、filter在放行以後,能夠捕獲到目標資源的輸出,從而對輸出作相似於壓縮這樣的設置。htm

3、filter鏈對象

  多個filter組成filter鏈。按順序依次執行。

  執行前後次序按照web.xml中<filter-mapping>位置的前後順序。

4、filter生命週期

  init()方法執行時filter建立,服務器在啓動時就執行filter的init()方法建立了該filter對象,該對象被全部的攔截請求所共享。

  distroy()方法執行時filter被摧毀,當移除服務器中的web應用或者中止服務器時服務器調用distroy()方法摧毀filter。

5、filter()初始化參數

  <filter><init-param><param-name></><param-value></></></>

  服務器啓動時會將參數封裝到filterConfig中並傳遞給init方法,供filter調用。

6、filter加強

  對一個對象加強通常共有以下三種方式:

  一、寫子類

  二、用包裝模式

  三、動態代理

   包裝模式五步:一、寫一個類,實現與被加強對象相同的接口;二、定義一個變量,記住被加強對象;三、定義一個構造方法,接受被加強對象;四、覆蓋須要加強的方法;五、對於不須要加強的方法,直接調用被加強對象(目標對象)的方法

  可以使用包裝模式實現對doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)中的ServeltRequest、ServletResponse對象加強;

  例如對ServletRequest的getParamter()方法加強來解決全棧的get方式的請求的亂碼問題;

 7、Filter映射<dispatcher>

  filter配置中<filter-mapping>中可包含<dispatcher>元素,該元素用於指定過濾器攔截的資源被Servlet容器調用的方式,能夠是REQUEST,INCLUDE,FORWARD和ERROR之一,默認REQUEST。用戶能夠設置多個<dispatcher>子元素用來指定Filter對資源的多種調用方式進行攔截。

  web資源調用共四種方式,即上述四種,

  REQUEST攔截器介於服務器與request請求的資源之間,該攔截器做用於request請求資源時。

  INCLUDE,FORWARD攔截器介於服務器與被包含的資源及轉發的資源之間,該攔截器做用於訪問資源中有include、forward標誌時服務器調用指定頁面(資源)。

  ERROR攔截器介於服務器與錯誤資源之間,該攔截器做用於訪問資源發生錯誤並向服務器拋出異常時,服務器調用對應的錯誤處理頁面(資源)。

相關文章
相關標籤/搜索