フィルタとは

広告

フィルタとは、サーブレットを呼び出す時に自動的に先に呼び出されるようなプログラムです。

フィルタが無い状態であれば、クライアントや別のサーブレットからサーブレットAが呼び出されると、そのままサーブレットAが実行されます。

サーブレットAを呼び出す

サーブレットAが実行される

これに対して、サーブレットAに対するフィルタAが設定されていた場合は次のように動作となります。

サーブレットAを呼び出す

フィルタAが実行される

サーブレットAが実行される

このように呼び出し元ではサーブレットAを呼び出していることに変更はないのですが、呼び出し元は気がつかないままサーブレットAが呼び出される前にフィルタAが実行されています。このようなプログラムをフィルタと言います。

フィルタとサーブレットは1対1の関係ではなく、URLパターンなどの指定によって、パターンに該当する全てのサーブレットに対して同じフィルタを適用することもできます。フィルタには本来呼び出す予定のサーブレットの情報も渡されてきますので、1つフィルタで複数のサーブレットに対する処理をしても、フィルタ内での処理後に本来のサーブレットへ処理を移す事が可能となります。

よって、例えば全てのサーブレットで必ず発生するような前処理を記述したフィルタを1つ作成しておき、フィルタの対象を全サーブレットにしておくことも可能です。例えばユーザー認証が通っていない場合にはサーブレットを実行させたくない場合、ユーザー認証の有無を確認するフィルタを作成しておけば、各サーブレットに認証のチェックを行うようなプログラムを記述する必要がなくなります。

また多段にフィルターをかけることも可能です。

サーブレットAを呼び出す

フィルタA(認証のチェック)が実行される

フィルタB(リクエストの文字コードの変換)が実行される

フィルタC(ログへの書き込み)が実行される

サーブレットAが実行される

このようにフィルタを多段にかけておくことができますので、必要な機能を持ったフィルタを作成して設定しておけば、サーブレット自体は変更することなく、そして呼び出し元も気にすることなく様々な前処理が可能となります(Servlet2.4からは後処理でもフィルタを設定可能となりました)。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。