MAP | PageMixer ドキュメント > チュートリアル > Servlet 環境における利用 > 制御の転送 | << | >> |
本節では、
PageServlet
を使用する際の制御転送のカスタマイズ方法を説明します。
他のページへの制御転送に興味が無い場合は、 本節を読み飛ばしても構いません。
本節におけるクラス図を以下に示します。
色づけされているのが本節で定義するクラスで、 それ以外は PageMixer において定義済みです。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
記述 | 完全名 |
---|---|
ConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext |
ForwardCondition | jp.ne.dti.lares.foozy.pagemixer.servlet.ForwardCondition |
ForwardStrategy | jp.ne.dti.lares.foozy.pagemixer.servlet.ForwardStrategy |
PageServlet | jp.ne.dti.lares.foozy.pagemixer.servlet.PageServlet |
RequestKey | jp.ne.dti.lares.foozy.pagemixer.servlet.RequestKey |
SessionKey | jp.ne.dti.lares.foozy.pagemixer.servlet.SessionKey |
本節での説明では、チュートリアル固有クラスは登場しません。
場合によっては、 ある Servlet から他の Servlet に制御を転送したい場合があるかもしれません。 例えば、 会員限定ページからログインページへと制御を転送したい場合もあるでしょう。
HTTP 応答の描画処理と制御転送ロジックを分離することで、 以下のことが可能になります。
ForwardCondition
の具象化制御転送のカスタマイズのために
PageMixer は "ForwardStrategy
" を提供しています。
しかし実のところ、
ForwardStrategy
におけるデフォルト実装は、
他の Servlet へ制御を転送すべきか否かを確定しません。
ForwardStrategy
は、
自身に登録された
"ForwardCondition
" に対して問い合わせを行うのです。
ForwardCondition
は、
制御転送を行うか否か、
転送する場合はどこへ転送するかの問い合わせを受け付けるメソッドを持っています。
public String forwards(ConsumerContext context)
このメソッドは、 制御を転送する場合には非 null 値を転送先として返却し、 それ以外の場合は null を返却します。 実装例を以下に示します。
if(null == context.getValue(KEY_LOGIN)){ context.setValue(KEY_LOGIN_REQUIRED, KEY_LOGIN_REQUIRED); return authPage_; } return null;
この例では、
KEY_LOGIN
および KEY_LOGIN_REQUIRED
はそれぞれ、
ユーザがログインしている場合にセットされる値を識別する
SessionKey
のインスタンスと、
ユーザが会員限定ページにアクセス使用としているか否かを示す
RequestKey
のインスタンスです。
コンパイル時ではなく、
設定時に転送先を確定したい場合もあるでしょう。
この例では、転送先は authPage_
に保持されています。
ForwardCondition
は、
派生クラスの初期化のために
setup
メソッドを提供しており、
そのデフォルト実装は「何もしない」実装です。
オーバライド例を以下に示します。
public void setup(HttpServlet servlet) throws ServletException // { super.setup(servlet); ServletContext context = servlet.getServletContext(); authPage_ = context.getInitParameter(INIT_PAGE_AUTH); if(null == authPage_){ throw new ServletException(INIT_PAGE_AUTH); } }
INIT_PAGE_AUTH
は、
ログイン(=認証)
ページのパスを取得するコンテキストパラメータ名を保持しています。
ですので、
カスタマイズした ForwardCondition
が
authPage_
値を返却することで、
制御をログインページに遷移させることが出来ます。
ForwardCondition
の具象化や、
ForwardStrategy
のオーバライドを行うための詳細は、
API ドキュメントを参照してください。
ForwardStrategy
は以下に示す
Servlet 初期化パラメータを受理可能です。
名前 | 説明 |
---|---|
forward.condition. N |
ForwardCondition 実装クラスの名前。
"N" は 0 オリジンの数値です。
複数の ForwardCondition を指定可能です。 |
カスタマイズした ForwardStrategy
クラスを使用する場合、
Servlet の init-param として
"servlet.filterFactory
"
"servlet.forwardStrategy
"
を以下のように指定する必要があります。
<init-param>
<param-name>
servlet.forwardStrategy
</param-name>
<param-value>
name of your custom ForwardStrategy
</param-value>
</init-param>
MAP | PageMixer ドキュメント > チュートリアル > Servlet 環境における利用 > 制御の転送 | << | >> |