MAP | PageMixer ドキュメント > チュートリアル > Servlet 環境における利用 > 「Filter」の生成 | << | >> |
本節では、
PageServlet
を使用する際の
Filter
生成のカスタマイズ方法を説明します。
本節におけるクラス図を以下に示します。
色づけされているのが本節で定義するクラスで、 それ以外は 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
におけるデフォルト実装が直接生成する
Filter
は
FilterPipeline
だけです。
この実装は、
自身に登録された
"Filter.Factory
" を使って生成した Filter
を、
FilterPipeline
に詰め込んでいます。
Filter.Factory
は、
以下に示すような生成要求受け付けメソッドを持っています。
public Filter create(ConsumerContext context)
指定された ConsumerContext
を通して、
Filter
生成に必要な実行時情報
(例: Servlet ないしウェブアプリケーション初期化パラメータ)
を取得することも出来ます。
注意:
実行コストを低減するために、
PageServlet
による
Filter
生成の create
メソッド起動は、
スレッドあたり高々一回しか行われません。
そのため、
リクエストないしセッションを通用範囲とする情報を、
Filter
の生成に使用すべきではありません。
実装例を以下に示します。
public Filter create(ConsumerContext context){ return new CommonFilter(); }
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>
MAP | PageMixer ドキュメント > チュートリアル > Servlet 環境における利用 > 「Filter」の生成 | << | >> |