リクエストスコープを利用したオブジェクトの共有
11.1 リクエストスコープを利用したオブジェクトの共有
Webアプリケーションで複数のサーブレットやJSPを連携して利用すると、処理中に作成されたオブジェクトを他のサーブレットやJSPの間で共有したい場合が出てきます。そのため、JSP/サーブレットでは他のJSPやサーブレットとオブジェクトを共有できる領域が用意されています。この領域のことをスコープと呼び、このスコープにオブジェクトを格納しておけば、他のJSPやサーブレットから必要に応じてオブジェクトを取り出し利用することができます。本章ではスコープの1つであるリクエストスコープについて学習します。
11.1.1 リクエストスコープの動作を知ろう
リクエストスコープは、ブラウザからWebページにアクセスした際に、そのページが表示されるまでプログラム内でデータを共有することができます。
1回のリクエストの処理が終わるまでにフォワードやインクルードによって実行された全てのファイル内でオブジェクトを共有することができますが、リクエストの処理が終わるとスコープが破棄されるため、1回目のリクエスト時のオブジェクトを2回目のリクエストで利用することはできません。
リクエストスコープでは下の図のようにデータを共有することができます。
図 11.1.1: リクエストスコープの流れ
図で示されているように、サーブレットAで登録したデータをフォワード先のサーブレットBやJSPで取得し扱うことができます。
11.1.2 リクエストスコープを利用するためのクラスとメソッド
リクエストスコープを利用する場合、javax.servlet.http.HttpServletRequestインタフェースに定義されたインスタンスメソッドを利用します。このメソッドには以下のようなものがあります。
表 11.1.1
このスコープを利用するうえで重要なのは、以下の4点です。
・登録するデータには名前をつける。
・登録されたオブジェクトはObject型として登録される。
・スコープからオブジェクトを取得する場合、名前を指定する。
・スコープから取得したオブジェクトはObject型として返されるので適切な型にキャストする。
上記の点に注意して、次の節ではリクエストスコープを利用したプログラムを作成していきます。
リクエストスコープに登録する名前リクエストスコープにオブジェクトを登録する場合、そのオブジェクトの名前を付けます。この名前はユニークな名前となっているため、同じ名前で登録を行うと、前に登録されたオブジェクトが上書きされて消えてしまいます。そのため、似ているオブジェクトをリクエストスコープへ登録する際には、名前の付け方に注意が必要です。