|
構築された完全な URI を返却します。
クッキーをサポートしないウェブクライアントに対しては、セッション ID を URL の中に含めます。
- Returns
-
このツールで構築された完全な URI を返却します。
例:
/myapp/stuff/View.vm?id=42&type=blue#foobar。
通常、このメソッドを明示的に呼ぶ必要はありません。
Velocity は、オブジェクトの文字列表現を取得するために toString() メソッドを自動的に呼びだします。
<a href="$link.setRelative("demo").addQueryString("key1", "val 1")">
My Link</a>
|
|
以下のように出力されます:
<a href="/myapp/demo.do?key1=val+1">My Link</a>
|
|
ウェブクライアントがクッキーをサポートしない場合にセッションを使用すると、 toString() メソッドは自動的にセッションIDを、返却する URI へ含めます。
上の例は以下のようなものを生成します:
<a href="/myapp/demo.do;jsessionid=aaaaaaanisPWVYEY01?key1=val+1">
My Link</a>
|
|
URI エンコーディングについて
URI エンコーディング とはセッションIDを URI 文字列中へ含めるものです。
この章では、この理由と、これがどのような動きとなるかについて簡単に説明します。
多くの Web アプリケーションは、特定のユーザとアプリケーションの状態を関連づけるためにセッションを利用します。
例えば、ユーザがオンラインショップをブラウジングしている間、ショッピングカートの状態を保持するためにセッションが利用されます。
Servlet API には、特定のセッションに属する HTTP リクエストを識別するための、2つの仕組みがあります。
- クッキー: セッションの開始時に、
セッションIDを含む新しいクッキーがクライアントに送られます。
クライアントはすべてのリクエストにこのクッキーをを付加して返却します。
- URI エンコーディング(訳者注: URL Rewriting、URL 書き換え):
セッションIDは URI へエンコードされます。
サーバはリクエストの URI を解析し、セッションIDを検出します。
多くの開発者は、セッションの識別にクッキーを使用することを選びます。
すべてのURIをエンコードする、ということが不要なので、クッキーベースの仕組みの方が簡単だからです。
しかし、セキュリティやプライバシーの問題から、ブラウザのクッキーのサポートを無効にしているユーザも存在します。
セッション管理がクッキーのみで行われている場合、上記のようなユーザに対してはセッション管理ができません。
こういったケースでも、良い設計がされているウェブアプリケーションならば、フォールバック(訳者注: 代替)として URI エンコーディングによる方法が機能します。
Servlet API は URI エンコーディングをサポートする2つのメソッドをウェブアプリケーション開発者へ提供しています。
java.lang.String encodeURL(java.lang.String url)
java.lang.String encodeRedirectURL(java.lang.String url)
この2つのメソッドは、もし、セッションを使用していて、かつ、ウェブクライアントがクッキーをサポートしていない場合に、セッションIDを URI に含めます。
LinkTool の toString() メソッドは encodeURL() メソッドを使用し、自動的に URI エンコーディングを行います。
したがって、アプリケーション中のすべての URI が LinkTool によって生成されている場合、アプリケーションはクライアントのクッキーのサポート有無にかかわらず、適切に動作するでしょう。
以下はクッキーが有効/無効時の toString() メソッドの出力例です。
<a href="$link.setURI("MyPage.vm").addQueryData("key1","val 1")">
My Link</a>
<form name="MyForm" method="post" action="$link.setURI("MyPage.vm")">
|
|
クッキー有効時の出力:
<a href="MyPage.vm?key1=val+1">My Link</a>
<form name="MyForm" method="post" action="MyPage.vm">
|
|
クッキー無効時の出力はこのようになります:
<a href="MyPage.vm;jsessionid=E9833012F7B2F8570963B137?key1=val+1">
My Link</a>
<form name="MyForm" method="post"
action="MyPage.vm;jsessionid=E9833012F7B20857096F37743B137">
|
|
|