Section5 - セッション管理を扱うためのサーブレットのデザインと開発 サーバーサイドの例外を扱うためのサーブレットのデザインと開発

下記それぞれにおけるインターフェイスとメソッドを識別

・同じWebアプリケーション内で、同じあるいは異なるサーブレットへの 複数のリクエストをまたいだセッションオブジェクトの取得

HttpServletRequest#getSession()

・セッションオブジェクトへのオブジェクトの格納

HttpSession#setAttribute(String name, Object value)

・セッションオブジェクトからのオブジェクトの取得

HttpSession#getAttribute(String name, Object value)

・特定のオブジェクトがセッションへ追加された時の反応

セッションに格納するオブジェクトのクラス(setAttribute/getAttributeの引数valueのクラス)に、 HttpSessionBindingListenerインターフェイスを実装

・セッションオブジェクトを削除する

HttpSession#invalidate()
現在のセッションを無効にし、関連づけられているオブジェクトを開放。

HttpSession#removeAttribute(String name)
指定したオブジェクトを開放。

5.2 与えられたシナリオで、セッション・オブジェクトが無効にされるか否か述べる

以下はweb.xmlでのHttpSessionに例です。

<session-config>
  <session-timeout>30</session-timeout>
</session-config>

<session-timeout>には(最後のアクセスからの)セッションの有効期限 を単位で指定します。

5.3 セッション管理に使用されるべき与えられたURLのHTMLページのセッション関連のデザインを要求

HttpServletで利用されるHTTPプロトコルは ステートレス(状態のない)プロトコルですが、 Webサイトなどでは状態を持ちたい場合があります。
例えば、オンラインショップでのショッピングカートでは、 あるユーザがカートに入れたアイテム情報を保持しておきたいです。

これはHttpSessionによって実現できます。

HttpSessionはクライアントのクッキー(Cookies)情報を利用する ことで実現されています。 リクエストのクッキーを見て、対応するHttpSessionオブジェクトを 取得します。

たまにクッキーが利用できない場合があります。 それは、ブラウザ側で"クッキーをオフにする"設定をしてる場合、 あるいは携帯電話のブラウザなどのクッキーの仕組みがない場合です。 この場合はURLリライティング(Rewritten URLs) を使うことで、HttpSessionを実現することができます。
出力したいURL、例えば"hoge.html"に対し、 encodeURL("hoge.html")を通すと、URLの後ろにセッションIDのついた "hoge.html?jsessionid=1234"というURLを作成できます。
サーブレットでは(内部的に)リクエストのセッションIDを見て、対応するHttpSessionオブジェクトを取得します。

ステートを保持する方法としては、その他に、HTMLのHIDDENパラメータ(Hidden Variables) を使う方法などもありますが、 わざわざ使う理由も少ないでしょう。