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

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

May 05, 2019 pm 02:52 PM

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

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

[推奨チュートリアル: 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

ARM上のJavaプログラムとX86アーキテクチャCPUのメモリリークの違いは何ですか? ARM上のJavaプログラムとX86アーキテクチャCPUのメモリリークの違いは何ですか? Apr 19, 2025 pm 11:18 PM

さまざまなアーキテクチャCPUでのJavaプログラムのメモリリーク現象の分析。この記事では、JavaプログラムがARMおよびX86アーキテクチャCPUでさまざまなメモリ動作を示すケースについて説明します...

Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Apr 19, 2025 pm 11:36 PM

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。

名前を数字に変換してグループ内でソートを実装する方法は? 名前を数字に変換してグループ内でソートを実装する方法は? Apr 19, 2025 pm 01:57 PM

名前を数字に変換してグループ内でソートを実装する方法は?ユーザーをグループでソートする場合、ユーザーの名前を数字に変換して、異なる可能性があることがよくあります...

See all articles