| MAP | PageMixer ドキュメント > チュートリアル > Servlet 環境における利用 > PageServlet 概要 | << | >> |
本節では、
PageMixer が提供する PageServlet の概要を説明します。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
| 記述 | 完全名 |
|---|---|
| ConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext |
| Filter | jp.ne.dti.lares.foozy.pagemixer.mixer.Filter |
| PageEntry | jp.ne.dti.lares.foozy.pagemixer.page.PageEntry |
| PageServlet | jp.ne.dti.lares.foozy.pagemixer.servlet.PageServlet |
| Producer | jp.ne.dti.lares.foozy.pagemixer.mixer.Producer |
| Renderer | jp.ne.dti.lares.foozy.pagemixer.mixer.Renderer |
| Token | jp.ne.dti.lares.foozy.pagemixer.Token |
本節での説明では、チュートリアル固有クラスは登場しません。
PageMixer は
HttpServlet 派生クラスである
"PageServlet" を提供しており、
PageServlet における応答描画手続きは以下のようになっています。
本クラスの利用者は、
アプリケーション固有の実装に注力出来る様になります。
ConsumerContext を生成
HttpServletRequest から Servlet パスを取得
Locale を確定
PageEntry を確定
PageEntry からエンコーディングを取得
Filter を生成
Producer を
PageEntry から取得
PageEntry
から得たコンテントタイプを当該応答オブジェクトに設定
Writer を取得
(エンコーディングは上記コンテントタイプにより設定)
Wirter から Renderer を生成
Renderer に Filter を接続
Producer により
Token 列を Filter に提供することで応答を描画
前述のように、
PageServlet はいくつかのカスタマイズポイントを持っていますが、
"テンプレートメソッド" パターンを用いる設計にはなっていません。
個々ののカスタマイズ実装を個別に再利用(ないし組み合わせ)出来るようにし、
それによって PageServlet 派生クラスの数を低減出来るように、
PageServlet は "ストラテジ" パターンにより実装されています。
PageServlet は、
それぞれのカスタマイズポイントにおいてどのクラスを使用するかを、
以下の手順で決定します。
PageServlet は配備記述子中の
Servlet 向け init-param で指定されたクラス(のインスタンス)を使用します。
各カスタマイズポイントの init-param 名は以降の節で説明します。
PageServlet は
コンストラクタ引数で指定された非 null のオブジェクトを使用します。
言い換えるなら、
PageServlet のコンストラクタは、
全てのカスタマイズポイントに対応する引数を持ちます。
PageServlet 派生クラスを定義し、
基底クラスのコンストラクタにおいて固有ストラテジオブジェクトを用いた
super() 起動を行うことで、
この方法によるカスタマイズが可能です。
このカスタマイズ方法は、
ほとんど全てのページが同一の設定を共有する場合に、
配備記述子の記述コストを低減します。
配備識別子でも、コンストラクタでも実装クラスの指定が無かった場合、
PageServlet は各カスタマイズポイントにおいて、
基底クラス(= デフォルト実装)を使用します。
但し、デフォルト実装を持たない(= デフォルト実装を決められない) ものもありますので注意してください。
上記の決定手順は各カスタマイズポイントごとに個別に実施されるので、 あるカスタマイズポイントは (1)、別のものは (2)、それ以外は (3) の方法で指定する、といったことも可能です。
| MAP | PageMixer ドキュメント > チュートリアル > Servlet 環境における利用 > PageServlet 概要 | << | >> |