ホームページ >Java >&#&チュートリアル >サーブレットフィルターとは

サーブレットフィルターとは

清浅
清浅オリジナル
2019-05-05 14:52:145140ブラウズ

サーブレット フィルタは、サーバーとクライアントのリクエストと応答の中間層コンポーネントであり、主にブラウザのリクエストをフィルタリングし、フィルタリングされたリクエストを次のリソースに転送するために使用されます。

サーブレットフィルターとは

[推奨チュートリアル: Java チュートリアル]

サーブレット フィルターの基本概念

サーブレット フィルタの文字通りの意味は、使用要件を満たすために一定レベルのフィルタリングが必要であるということです。実際、サーブレット フィルタは、サーバーとクライアントのリクエストと応答の中間層コンポーネントです。実際のプロジェクト開発では、サーブレット フィルターは主にブラウザーのリクエストをフィルターし、フィルターされたリクエストを次のリソースに転送するために使用されます。

フィルターは、Servlet 2.3 以降に追加された新機能です。ユーザーによる特定のリソースへのアクセスを制限する必要がある場合、またはリクエストの処理時に事前に特定のリソースを処理する必要がある場合に、フィルターを使用できます。

フィルターはコンポーネントの形で WEB アプリケーションにバインドされており、他の WEB アプリケーション コンポーネントとは異なり、フィルターは「チェーン」形式で処理されます。

サーブレットフィルターとは

フィルタ

サーブレット フィルタ フィルタは、表示、抽出するためにリクエストと応答をインターセプトする小さな Web コンポーネントです。または、クライアントとサーバー間で交換されるデータを何らかの方法で操作して、「フィルタリング」機能を実現します。通常、フィルタはいくつかの機能的な Web コンポーネントをカプセル化します。フィルタは、タスクをプラグイン可能なコンポーネントにカプセル化するためのオブジェクト指向のモジュラー メカニズムを提供します。フィルタ コンポーネントは構成ファイルを通じて宣言され、動的にプロキシされます。

簡単に言うと、サーブレット フィルターは次のとおりです:

#● 宣言型: web.xml 構成ファイルで宣言することにより、アプリケーション コードや JSP ページを変更せずにフィルターを追加および削除できます。 。

# 柔軟性: フィルターを使用して、クライアントを直接呼び出して前処理および後処理作業を実行できます。フィルター チェーンを通じていくつかの柔軟な機能を実現できます。

# ポータブル: 現在の各 Web コンテナはサーブレット仕様に基づいて設計されているため、サーブレット フィルタもコンテナ間で動作します。

## ● 再利用可能: 移植性と宣言的な構成方法に基づいて、フィルターは再利用可能です。

一般に、サーブレット フィルターは、構成ファイルを通じて柔軟に宣言されるモジュール式の再利用可能なコンポーネントです。フィルターは受信リクエストと送信応答を動的にインターセプトし、プログラム コードを変更することなく透過的に追加または削除します。どのプラットフォームや Web コンテナからも独立しています。

フィルターの動作原理

フィルター アーキテクチャの説明に基づいて、フィルターの動作原理をフローチャートで簡単に示します。

クライアント ブラウザが Web サーバーの特定のリソースにアクセスすると、フィルター 1 の code1 コード ブロックの関連処理の後、リクエスト リクエストをフィルター チェーンに渡します。フィルター 2 (フィルター チェーンの順序は構成ファイル内の順序に基づきます) フィルター 2 が処理された後、リクエストは渡されたサーブレットに対応するロジックを完了します。応答を返すプロセスは、フィルター チェーンの順序が逆になることを除いて似ています。そのため、ここでは詳細には説明しません。 サーブレットフィルターとは

フィルター作成プロセス

フィルターを作成するには、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>

以上がサーブレットフィルターとはの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

関連記事

続きを見る