溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

servlet過濾器是什么

發(fā)布時間:2020-10-30 10:22:05 來源:億速云 閱讀:127 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)servlet過濾器是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

servlet過濾器是服務(wù)器與客戶端請求與響應(yīng)的中間層組件,它主要是用于對瀏覽器的請求進行過濾處理,并將過濾后的請求再轉(zhuǎn)給下一個資源。

servlet過濾器是什么

過濾器的基本概念

Servlet過濾器從字面上的字意理解為經(jīng)過一層次的過濾處理才達到使用的要求,而其實Servlet過濾器就是服務(wù)器與客戶端請求與響應(yīng)的中間層組件,在實際項目開發(fā)中Servlet過濾器主要用于對瀏覽器的請求進行過濾處理,將過濾后的請求再轉(zhuǎn)給下一個資源。

Filter是在Servlet 2.3之后增加的新功能,當(dāng)需要限制用戶訪問某些資源或者在處理請求時提前處理某些資源的時候,就可以使用過濾器完成。

過濾器是以一種組件的形式綁定到WEB應(yīng)用程序當(dāng)中的,與其他的WEB應(yīng)用程序組件不同的是,過濾器是采用了“鏈”的方式進行處理的。

servlet過濾器是什么

Filter

Servlet過濾器Fileter是一個小型的web組件,它們通過攔截請求和響應(yīng),以便查看、提取或以某種方式操作客戶端和服務(wù)器之間交換的數(shù)據(jù),實現(xiàn)“過濾”的功能。Filter通常封裝了一些功能的web組件,過濾器提供了一種面向?qū)ο蟮哪K化機制,將任務(wù)封裝到一個可插入的組件中, Filter組件通過配置文件來聲明,并動態(tài)的代理。

簡單來說Servlet的Filter是:

●  聲明式的:通過在web.xml配置文件中聲明,允許添加、刪除過濾器,而無需改動任何應(yīng)用程序代碼或jsp頁面。

●  靈活的:過濾器可用于客戶端的直接調(diào)用執(zhí)行預(yù)處理和后期的處理工作,通過過濾鏈可以實現(xiàn)一些靈活的功能。

●  可移植的:由于現(xiàn)今各個web容器都是以Servlet的規(guī)范進行設(shè)計的,因此Servlet過濾器同樣是跨容器的。

●  可重用的:基于其可移植性和聲明式的配置方式,F(xiàn)ilter是可重用的。

總的來說,Servlet的過濾器是通過一個配置文件來靈活的聲明的模塊化可重用組件。過濾器動態(tài)的截獲傳入的請求和傳出的響應(yīng),在不修改程序代碼的情況下,透明的添加或刪除他們。其獨立于任何平臺和web容器。

Filter工作原理

基于Filter體系結(jié)構(gòu)的描述,我們可以看出Filter的工作原理,簡單的通過一幅流程圖加以演示:

servlet過濾器是什么

客戶端瀏覽器在訪問web服務(wù)器的某個具體資源的時候,經(jīng)過過濾器1中code1代碼塊的相關(guān)處理之后,將request請求傳遞給過濾鏈中的下一個過濾器2,(過濾鏈的順序以配置文件中的順序為基準(zhǔn))過濾器2處理完之后,request就傳遞的Servlet完成相應(yīng)的邏輯。返回響應(yīng)的過程類似,只是過濾鏈的順序相反,這里就不多說了。

Filter的創(chuàng)建過程

要編寫一個過濾器必須實現(xiàn)Filter接口。實現(xiàn)其接口規(guī)定的方法。

★  實現(xiàn)javax.servlet.Filter接口

★ 實現(xiàn)init方法,讀取過濾器的初始化參數(shù)

★ 實現(xiàn)doFilter方法,完成對請求或響應(yīng)的過濾

★ 調(diào)用FilterChain接口對象的doFilter方法,向后續(xù)的過濾器傳遞請求或響應(yīng)

一個最基本的過濾器實現(xiàn)代碼:

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() {
        // 容器(服務(wù)器)啟動時執(zhí)行
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        /* 容器(服務(wù)器)時執(zhí)行 */
        System.out.println("======== 初始化方法 ========");
        // 獲取的是web.xml中配置Filter時設(shè)置的值,參數(shù)為設(shè)置值得名稱,若參數(shù)不存在,則返回空
        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 {
        /* 在訪問的時候執(zhí)行 */
        System.out.println("======= 開始執(zhí)行doFilter ========");
        // 轉(zhuǎn)發(fā)到下一個組件,進行后續(xù)的處理(組件可以是一個過濾器,也可以是一個servlet)
        chain.doFilter(request, response);
        System.out.println("======= 結(jié)束執(zhí)行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><!-- 設(shè)置在過濾器中執(zhí)行初始化方法時,獲取的值 -->
        <param-name>param</param-name>
        <param-value>studyFilter</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>basicsFilter</filter-name>
    <!-- 設(shè)置為訪問該網(wǎng)站所有地址都需要通過該過濾器 -->
    <url-pattern>/*</url-pattern>
    <!-- 設(shè)置為只有訪問該網(wǎng)站的/Helloword地址時才通過該過濾器 -->
    <url-pattern>/Helloword</url-pattern>
</filter-mapping>

關(guān)于servlet過濾器是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI