目次へ

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エラーを返すフィルタを適応する事。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp