Home of: [工房 "藤車"] > [SourceForge.net における PageMixer]

「Filter」の生成

本節では、 PageServlet を使用する際の Filter 生成のカスタマイズ方法を説明します。

概要

クラス図

本節におけるクラス図を以下に示します。

クラス図
クラス図 (クリックで拡大表示)

色づけされているのが本節で定義するクラスで、 それ以外は PageMixer において定義済みです。

クラス名

本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。

PageMixer フレームワークのクラス

記述完全名
ConsumerContext jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext
Filter jp.ne.dti.lares.foozy.pagemixer.mixer.Filter
FilterFactory jp.ne.dti.lares.foozy.pagemixer.servlet.FilterFactory
FilterPipeline jp.ne.dti.lares.foozy.pagemixer.mixer.FilterPipeline
PageServlet jp.ne.dti.lares.foozy.pagemixer.servlet.PageServlet

チュートリアルの固有クラス

記述完全名
CommonFilter pagemixer.filter.CommonFilter

カスタマイズの目的

HTTP 応答の描画処理と Filter 生成を分離することで、 以下のことが可能になります。

Filter.Factory の実装

Filter 生成をカスタマイズするために PageMixer は "FilterFactory" を提供しています。

しかし実のところ、 FilterFactory におけるデフォルト実装が直接生成する FilterFilterPipeline だけです。 この実装は、 自身に登録された "Filter.Factory" を使って生成した Filter を、 FilterPipeline に詰め込んでいます。

Filter.Factory は、 以下に示すような生成要求受け付けメソッドを持っています。


public Filter create(ConsumerContext context)

create メソッドのシグネチャ

指定された ConsumerContext を通して、 Filter 生成に必要な実行時情報 (例: Servlet ないしウェブアプリケーション初期化パラメータ) を取得することも出来ます。

注意: 実行コストを低減するために、 PageServlet による Filter 生成の create メソッド起動は、 スレッドあたり高々一回しか行われません。

そのため、 リクエストないしセッションを通用範囲とする情報を、 Filter の生成に使用すべきではありません。

実装例を以下に示します。


public Filter create(ConsumerContext context){
    return new CommonFilter();
}

Filter.Factory 実装

Filter.Factory 実装クラスを、 個々の Filter カスタムクラスの内部クラスとして定義するのは、 保守の上で良いアイディアだと思います。

Filter.Factory の実装や FilterFactory をオーバライドする際の詳細は、 API ドキュメントを参照してください。

設定

基底クラスのパラメータ

FilterFactory は以下に示す Servlet 初期化パラメータを受理可能です。

名前 説明
filter.factory.N Filter.Factory 実装クラスの名前。 "N" は 0 オリジンの数値です。 複数の Filter.Factory を指定可能です。

カスタムクラスを使用するためのパラメータ

カスタマイズした FilterFactory クラスを使用する場合、 配備記述子において、 Servlet の init-param として "servlet.filterFactory" を以下のように指定する必要があります。


<init-param>
  <param-name>
    servlet.filterFactory
  </param-name>
  <param-value>
    name of your custom FilterFactory
  </param-value>
</init-param>

カスタム FilterFactory の指定

次節「配備」へ