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 概要 | << | >> |