URL 再書き込み用の JSP テンプレートの書き込み

セッション状態を維持するために URL 再書き込みを使用したい場合には、プレーン HTML ファイル中の Web アプリケーションのパーツへのリンクを組み込まないでください。 この制約が必要であるのは、プレーン HTML ファイルでは URL エンコードを使用できないからです。 URL 再書き込みを使用して状態を維持するには、セッション中にユーザーが要求するすべてのページに Java インタープリターが理解できるコードが必要です。 Web アプリケーションにこうしたプレーン HTML ファイルがあり、セッション中にユーザーがアクセスする可能性があるサイトの部分がある場合には、それらを JSP ファイルに変換してください。 cookie によるセッションの維持と異なり、URL 再書き込みによるセッションの維持では、アプリケーション中の各 JSP テンプレートが <A> タグのすべての HREF 属性に URL エンコードを使用しなければならないので、これはアプリケーション・ライターに影響を及ぼします。 アプリケーション中の 1 つまたは複数の JSP テンプレートが encodeURL(String url) または encode RedirectURL(String url) メソッドを呼び出さない場合には、セッションが失われることになります。

リンクの書き込み

URL 再書き込みを使用すると、ブラウザーに戻すか、あるいはリダイレクトするリンクにはすべて、セッション ID が付加されなければなりません。 たとえば Web ページでのこのリンクが以下のものであるとします。

<a href="store/catalog">

これは以下のように再書き込みされます。

<a href="store/catalog;$jsessionid$DA32242SSGE2">

ユーザーがこのリンクをクリックすると、URL の再書き込みされたフォームがクライアントの要求の一部としてサーバーに送られます。 Servlet Engine は ;$jsessionid$DA32242SSGE2 をセッション ID として認識し、それを、このユーザーに適した HttpSession オブジェクトを取得するために保管します。

以下の例は、Java コードがどのように JSP ファイルに組み込まれるかを示したものです。

<%
response.encodeURL ("/store/catalog");
%>

ブラウザーに戻す URL を再書き込みするには、URL を出力ストリームに送る前に、JSP テンプレートで encodeURL() メソッドを呼び出してください。 たとえば、URL 再書き込みを使用しない JSP テンプレートに次のものが含まれているとします。

out.println("<a href=\"/store/catalog\">catalog</a>")"

これは、以下のものによって置き換えます。

out.println("<a href=\"");
out.println(response.encodeURL ("/store/catalog"));
out.println("\">catalog</a>");

リダイレクトするする URL を再書き込みするには、encodeRedirctURL() メソッドを呼び出してください。 たとえば JSP テンプレートに以下のものが含まれているとします。

response.sendRedirect (response.encodeRedirectURL ("http://myhost/store/catalog"));

encodeURL() および encodeRedirectURL() メソッドは、HttpServletResponse オブジェクトの一部となります。 両方の場合とも、これらの呼び出しで URL 再書き込みが URL のエンコード前に構成されているかどうかを判別するための検査が行われます。 構成されていない場合には、オリジナルの URL を戻します。

フォームの書き込み

送信用にフォームを書き込むには、フォーム・テンプレートの ACTION タグ上の response.encodeURL("Logon"); を呼び出します。 以下は、その例です。

String strLoginPost = response.encodeURL("Logon");

<FORM NAME="Logon" METHOD="post" ACTION= <%= strLoginPost %> >

...


</FORM>

先頭ページの書き込み

エントリー・ページ (通常はホーム・ページ) にはフレームを入れることはできません。 ストア内でフレームを使用したい場合、ストアのエントリー・ページとして動作する、ストアへのリンクのあるフレームなしのページを持つことができます。 ただし、ストアがフレームを使用していて、顧客がエントリー・ページを最初に経由せずにフレームのあるそれらのページにアクセスしようとすると、その顧客のセッションは失われる可能性があります。 顧客が戻るボタンを使用 (フレームありの場合のみ) してエントリー・ページに戻りエントリー・ページを最新表示する場合にも、顧客のセッションが失われる可能性があります。 エントリー・ページの最新表示により、顧客には新しいセッション ID が与えられます。 このようにセッションが失われるのを防ぐためには、戻るボタンの代わりに、エントリー・ページへ戻るリンクが必要です。

関連概念 (1275 バイト)

関連タスク (1201 バイト)

IBM 著作権