<filter>要素と<filter-mapping>要素

広告

ではまずどのサーブレットに対してフィルタをかけるのかを設定する方法について確認しておきます。web.xmlにて<filter>要素を使って指定します。

下記のように定義されています。

<xsd:complexType name="filterType">
  <xsd:sequence>
    <xsd:element name="filter-name" type="j2ee:filter-nameType" /> 
    <xsd:element name="filter-class" type="j2ee:fully-qualified-classType"></xsd:element>
    <xsd:element name="init-param" type="j2ee:param-valueType" minOccurs="0" maxOccurs="unbounded"></xsd:element>
  </xsd:sequence>
</xsd:complexType>

子要素として必須となるのが<filter-name>要素と<filter-class>要素です。どちらの要素も1回だけ記述します。

<servlet-name>要素と<servlet-class>要素の関係と同じで、フィルターとして実行されるサーブレットクラスとフィルタ名を登録します。

<web-app>
  <filter>
    <filter-name>
      フィルタ名
    </filter-name>
    <filter-class>
      フィルタとして実行されるサーブレットクラス名
    </filter-class>
  </filter>
</web-app>

例えば「FilterTest.class」というサーブレットに対して「filtertest」と言うフィルター名を設定する場合は次のようになります。

<web-app>
  <filter>
    <filter-name>
      filtertest
    </filter-name>
    <filter-class>
      FilterTest
    </filter-class>
  </filter>
</web-app>

<init-param>要素はフィルタに初期値を設定したい場合に使います。0回以上無制限に記述できますので、書いても書かなくても構いません。また何個でも設定する事ができます。(初期値については別のページで詳しく見ていきます)。

<filter-mapping>要素

<filter-mapping>要素はどのサーブレットが呼び出された時にフィルタが適用されるのかを指定するものです。

下記のように定義されています。

<xsd:complexType name="filter-mappingType">
  <xsd:sequence>
    <xsd:element name="filter-name" type="j2ee:filter-nameType" /> 
    <xsd:choice>
      <xsd:element name="url-pattern" type="j2ee:url-patternType" /> 
      <xsd:element name="servlet-name" type="j2ee:servlet-nameType" /> 
    </xsd:choice>
    <xsd:element name="dispatcher" type="j2ee:dispatcherType" minOccurs="0" maxOccurs="4" /> 
  </xsd:sequence>
</xsd:complexType>

子要素としてはまず<filter-name>要素を指定します。これはマッピングを行うフィルターを指定します。そしてどのサーブレットが呼ばれた時にフィルタを実行するのかを<url-pattern>要素又は<servlet-name>要素のどちらかを使って指定します。

<web-app>
  <filter-mapping>
    <filter-name>
      フィルタ名
    </filter-name>
    <url-pattern>
      URLパターン
    </url-pattern>
  </filter-mapping>
</web-app>

特定のサーブレットを対象としたい場合には<servlet-name>要素を使って指定しますが、複数のサーブレットを対象にする場合には<url-pattern>要素でパターンを指定します。

URLパターンの指定の仕方は<servlet-mapping>要素の場合と同じですので、次のURLを参考にして下さい。

URLパターン(特定のファイルへのマッピング)
URLパターン(パスマッピング)
URLパターン(拡張子マッピング)
URLパターン(デフォルトマッピング)
URLパターンの優先順位

例として「/hello/」で始まるURLでサーブレットが呼ばれた場合に適用するフィルタを作成する場合は次のようになります。

<web-app>
  <filter>
    <filter-name>
      filtertest
    </filter-name>
    <filter-class>
      FilterTest
    </filter-class>
  </filter>

  <filter-mapping>
    <filter-name>
      filtertest
    </filter-name>
    <url-pattern>
      /hello/*
    </url-pattern>
  </filter-mapping>
</web-app>

web.xmlファイル内での記述する位置

フィルタを使う場合でも、<servlet>要素や<servlet-mapping>要素も当然ながら記述する必要がありますが、記述する位置については<servlet>要素よりも前に記述しておく必要があります。

各要素の記述する順番については「Webアプリケーションの設定」を参照しておいて下さい。(将来的には順序は関係無くなるらしいですが現時点ではまだ順序は必要です)。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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