サーブレット 6章 フィルタ
- 6.1. フィルタとは
- 6.2. フィルタの作成
- 6.3. フィルタの設定
- 6.4. フィルタの機能の拡張
6.3. フィルタの設定
フィルタの設定も「WEB-INF/web.xml」で行います。フィルタの宣言と、フィルタを適応するURLの設定の2種類に分かれます。
<filter> <filter-name>Encoding</filter-name> <filter-class>EncodingFilter</filter-class> </filter> <filter> <filter-name>Counter</filter-name> <filter-class>CounterFilter</filter-class> </filter> <filter-mapping> <filter-name>Encoding</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Counter</filter-name> <url-pattern>/servlet/IndexServlet</url-pattern> </filter-mapping>
フィルタの宣言は<filter>タグで行います。<filter>および<filter-mapping>の設定は、<context-param>の次、<servlet>より前で行います。<filter>タグは<filter-name><filter-class>で構成されており、前者でフィルタを識別する名前、後者でフィルタを実装したクラス名を指定します。<servlet>タグとよく似た構成をしています。
フィルタを適応するURLの設定は<filter-mapping>タグで行います。その中の<filter-name>で適応するフィルタ名、<url-pattern>でフィルタを適応するURLのパターンを指定します。<url-pattern>の指定方法は<servlet-mapping>の<url-pattern>と同じで以下のようになっています。
/???/* | /???/で始まる全てのURLにマッチします。例:「/resource/*」と指定した場合は、「http://***/sample/resource/」で始まる全てのURL「http://***/sample/resource/test/test」等にマッチします。 |
*.??? | ???を拡張子にもつ全てのURLにマッチします。例:「*.cgi」と指定した場合は、「http://***/sample/」以下で、「cgi」を拡張子に持つURL全てにマッチします。 |
/* | 全てのURLにマッチします。あらゆるWWWアプリケーションのリクエストに対して、フィルタが適応されます。 |
複数のフィルタがマッチした場合にはどうなるでしょうか。その場合にはマッチしたフィルタ全てが起動されます。起動される順番は、設定の順番です。ですから<filter-mapping>については内容だけでなく、順番にも注意が必要です。
最後にフィルタに対する初期設定値を与える方法を説明します。<filter>タグ内に<init-param>タグを用いて指定します。<servlet>タグ内で初期設定値を与える方法と同じです。
<filter> <filter-name>Encoding</filter-name> <filter-class>EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>EUC-JP</param-value> </init-param> </filter>
複数初期設定値を与える場合は、その数だけ<init-param>タグを繰り返します。
(実習課題1)
サンプルのフィルタを実装し、5章実習課題3のサーブレットに適応する事。
解答例はこちら(実習課題2)
実習課題1を改良しなさい。
- Internet Explorer以外のブラウザからのアクセスに対して、505エラーを返すフィルタを適応する事。