| 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)
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 の指定| MAP | PageMixer ドキュメント > チュートリアル > Servlet 環境における利用 > 「Filter」の生成 | << | >> |