初識Servlet過濾器

2021-05-25 23:02:52 字數 2594 閱讀 6486

web應用開發中過濾器以及功能

定義:過濾器其實是乙個程式,它先於與之相關的servlet或jsp頁面執行在伺服器上。過濾器可附加到乙個或多個servlet或jsp頁面上,並且可以檢查進入這資源的請求資訊

功能:是對 servlet 容器呼叫 servlet 的過程進行攔截,從而在 servlet 進行響應處理的前後實現一些特殊的功能

二、 

工作原理

當客戶端傳送請求,首先經過過濾器(過濾不合法動作以及不合法文字並進行處理),在servlet作為過濾器使用時,它可以對客戶的請求進行處理。處理完成後,它會交給下乙個過濾器處理,這樣,客戶的請求在過濾鏈裡逐個處理,直到請求傳送到目標為止。處理後可採取如下如下動作

①以常規的方式呼叫資源(即,呼叫servlet或jsp頁面)。

②利用修改過的請求資訊呼叫資源。

③呼叫資源,但在傳送響應到客戶機前對其進行修改。

④阻止該資源呼叫,代之以轉到其他的資源,返回乙個特定的狀態**或生成替換輸出。

注意:在乙個 web 應用程式中可以註冊多個 filter 程式,每個 filter 程式都可以對乙個或一組 servlet 程式進行攔截。若有多個 filter 程式對某個 servlet 程式的訪問過程進行攔截,當針對該 servlet 的訪問請求到達時,web 容器將把這多個 filter 程式組合成乙個 filter 鏈(過濾器鏈)。filter 鏈中各個 filter 的攔截順序與它們在應用程式的 web.xml 中對映的順序一致

三、如何在web程式中實現過濾器

1.實現步驟:

在 servlet api 中定義了三個介面類來開供開發人員編寫 filter 程式:filter, filterchain, filterconfig。實現過濾器的步驟如下:

1). 編寫乙個filter程式,實現filter介面,並根據需要實現介面中過濾器生命週期的方法

2).在web.xml中註冊和對映過濾器

2.filter的生命週期()

1)init(filterconfig filterconfig):這是servlet過濾器的初始化方法.

在 web 應用程式啟動時,web 伺服器將根據 web.xml 檔案中的配置資訊來建立每個註冊的 filter 例項物件,並將其儲存在伺服器的記憶體中。web容器(servlet容器)建立 filter 物件例項後,將立即呼叫該 filter 物件的 init 方法。

init 方法在 filter 生命週期中僅執行一次, servlet容器在呼叫 init 方法時,會傳遞乙個包含 filter 的配置和執行環境的 filterconfig 物件(filterconfig的用法和servletconfig類似)。利用filterconfig物件可以得到servletcontext物件,以及部署描述符中配置的過濾器的初始化引數。

在這個方法中,可以丟擲servletexception異常,通知容器該過濾器不能正常工作。

2)  destroy(): servlet容器在解除安裝過濾器例項前呼叫該方法。該方法在filter的生命週期中僅執行一次。在這個方法中,可以釋放過濾器使用的資源.

3)  dofilter(servletrequest request,servletresponse response, filterchain chain)類似於servlet介面的service()方法。當客戶端請求目標資源的時候,容器就會呼叫與這個目標資源相關聯的過濾器的dofilter()方法。

其中引數 request, response 為 web 容器或 filter 鏈的上乙個 filter 傳遞過來的請求和相應物件;

引數 chain 為代表當前 filter 鏈的物件,在特定的操作完成後,可以在當前 filter 物件的 dofilter 方法內部需要呼叫 filterchain 物件的 chain.dofilter(request,response)方法才能把請求交付給 filter 鏈中的下乙個 filter 或者目標 servlet 程式去處理,也可以直接向客戶端返回響應資訊,或者利用requestdispatcher的forward()和include()方法,以及httpservletresponse的sendredirect()方法將請求轉向到其他資源

3.過濾器對請求的過濾

1)  servlet容器建立乙個過濾器例項

2)  servlet容器呼叫init方法,讀取過濾器的初始化引數

3)  servlet容器呼叫dofilter方法,根據初始化引數的值,判斷該請求是否合法

4)  如果該請求不合法則阻塞該請求

5)  如果該請求合法則呼叫chain.dofilter方法將該請求向後續傳遞

4.過濾器對響應的過濾

1)過濾器截獲客戶端的請求.

2)重新封裝servletresponse,在封裝後的servletresponse中提供使用者自定義的輸出流.將請求向後續傳遞.

3)web元件產生響應.

4)從封裝後的servletresponse中獲取使用者自定義的輸出流.

5)將響應內容通過使用者自定義的輸出流寫入到緩衝流中.在緩衝流中修改響應的內容後清空緩衝流,輸出響應內容.

初識servlet中過濾器

對於web應用程式來說,過濾器是乙個駐留在伺服器端的web元件,它可以擷取客戶端與資源之間的請求與相應資訊,並對這些資訊進行過濾 執行順序是 當web伺服器接收到對資源檔案的請求時,先判斷是否有與該資源檔案關聯的過濾器,如果有,那麼容器講請求先交個過濾器進行處理,過濾器處理完後再轉交給目標資源。當目...

關於Servlet的過濾器

1 過濾器的作用?a.在客戶端的請求訪問後端資源之前,攔截這些請求 b.在伺服器的響應傳送回客戶端之前,處理這些響應 2 過濾器的種類?a.身份驗證過濾器 authentication filters b.資料壓縮過濾器 data compression filters c.加密過濾器 encryp...

servlet過濾器學習筆記

過濾器作用 預先處理需要訪問的頁面,比如登入檢測,編碼轉換等 基礎使用 傳統的xml方式需要在web.xml裡配置,配置方式與servlet類似 現在的annotation配置比較方便 分類,過濾器有五種 request 對請求進行攔截,具體攔截可以自行指定,也可以萬用字元指定,比如 do,但是如果...