您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關servlet過濾器是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
servlet過濾器是服務器與客戶端請求與響應的中間層組件,它主要是用于對瀏覽器的請求進行過濾處理,并將過濾后的請求再轉給下一個資源。
過濾器的基本概念
Servlet過濾器從字面上的字意理解為經過一層次的過濾處理才達到使用的要求,而其實Servlet過濾器就是服務器與客戶端請求與響應的中間層組件,在實際項目開發中Servlet過濾器主要用于對瀏覽器的請求進行過濾處理,將過濾后的請求再轉給下一個資源。
Filter是在Servlet 2.3之后增加的新功能,當需要限制用戶訪問某些資源或者在處理請求時提前處理某些資源的時候,就可以使用過濾器完成。
過濾器是以一種組件的形式綁定到WEB應用程序當中的,與其他的WEB應用程序組件不同的是,過濾器是采用了“鏈”的方式進行處理的。
Filter
Servlet過濾器Fileter是一個小型的web組件,它們通過攔截請求和響應,以便查看、提取或以某種方式操作客戶端和服務器之間交換的數據,實現“過濾”的功能。Filter通常封裝了一些功能的web組件,過濾器提供了一種面向對象的模塊化機制,將任務封裝到一個可插入的組件中, Filter組件通過配置文件來聲明,并動態的代理。
簡單來說Servlet的Filter是:
● 聲明式的:通過在web.xml配置文件中聲明,允許添加、刪除過濾器,而無需改動任何應用程序代碼或jsp頁面。
● 靈活的:過濾器可用于客戶端的直接調用執行預處理和后期的處理工作,通過過濾鏈可以實現一些靈活的功能。
● 可移植的:由于現今各個web容器都是以Servlet的規范進行設計的,因此Servlet過濾器同樣是跨容器的。
● 可重用的:基于其可移植性和聲明式的配置方式,Filter是可重用的。
總的來說,Servlet的過濾器是通過一個配置文件來靈活的聲明的模塊化可重用組件。過濾器動態的截獲傳入的請求和傳出的響應,在不修改程序代碼的情況下,透明的添加或刪除他們。其獨立于任何平臺和web容器。
Filter工作原理
基于Filter體系結構的描述,我們可以看出Filter的工作原理,簡單的通過一幅流程圖加以演示:
客戶端瀏覽器在訪問web服務器的某個具體資源的時候,經過過濾器1中code1代碼塊的相關處理之后,將request請求傳遞給過濾鏈中的下一個過濾器2,(過濾鏈的順序以配置文件中的順序為基準)過濾器2處理完之后,request就傳遞的Servlet完成相應的邏輯。返回響應的過程類似,只是過濾鏈的順序相反,這里就不多說了。
Filter的創建過程
要編寫一個過濾器必須實現Filter接口。實現其接口規定的方法。
★ 實現javax.servlet.Filter接口
★ 實現init方法,讀取過濾器的初始化參數
★ 實現doFilter方法,完成對請求或響應的過濾
★ 調用FilterChain接口對象的doFilter方法,向后續的過濾器傳遞請求或響應
一個最基本的過濾器實現代碼:
java類:
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class BasicsFilter implements Filter { public BasicsFilter() { // 容器(服務器)啟動時執行 } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { /* 容器(服務器)時執行 */ System.out.println("======== 初始化方法 ========"); // 獲取的是web.xml中配置Filter時設置的值,參數為設置值得名稱,若參數不存在,則返回空 String initParam = fConfig.getInitParameter("param"); System.out.println("param ========" + initParam); } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { /* 在訪問的時候執行 */ System.out.println("======= 開始執行doFilter ========"); // 轉發到下一個組件,進行后續的處理(組件可以是一個過濾器,也可以是一個servlet) chain.doFilter(request, response); System.out.println("======= 結束執行doFilter ========"); } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } }
web.xml配置:
<filter> <filter-name>basicsFilter</filter-name> <filter-class>com.hudongwu.filter.BasicsFilter</filter-class> <init-param><!-- 設置在過濾器中執行初始化方法時,獲取的值 --> <param-name>param</param-name> <param-value>studyFilter</param-value> </init-param> </filter> <filter-mapping> <filter-name>basicsFilter</filter-name> <!-- 設置為訪問該網站所有地址都需要通過該過濾器 --> <url-pattern>/*</url-pattern> <!-- 設置為只有訪問該網站的/Helloword地址時才通過該過濾器 --> <url-pattern>/Helloword</url-pattern> </filter-mapping>
關于servlet過濾器是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。