サーブレット間のオブジェクトの共有と渡し
|
|
サーブレット間のオブジェクトの共有と渡し
サーブレット間で情報を共有するには、データベースなどの外部リソースを共有する手段以外に、サーブレット・コンテナが管理する要求、セッション、コンテキストで共有することができる。これを整理すると以下のようになる。
サーブレット・コンテナが管理するオブジェクトのサーブレット間共有 |
|
public interface ServletRequest |
request.setAttribute(“name”, sharedObject); |
SharedObject sharedObject = (SharedObject)request.getAttribute(“name”); |
|
public interface HttpSession |
HttpSession session = request.getSession(true); session.putValue(“name”, sharedObject); |
SharedObject sharedObject = (SharedObject)session.getValue(“name”); |
|
public interface ServletContext |
ServletContext context = getServletContext(); context.setAttribute(“name”, sharedObject); |
SharedObject sharedObject = (SharedObject)context.getAttribute(“name”); |
最初の要求オブジェクトに属性としてオブジェクトをセットするのは、通常コンテナ側でクライアント認証の結果などを付与するメカニズムとして用意されたものと思うが、前処理などのサーブレットが、情報を付与して後処理のサーブレットやJSPにRequestDispatcherを使って転送することに利用できる。
二番目のセッションへのオブジェクトのセットは、SingleThreadModelの実装など、複数のサーブレットがクライアント対応する際、該クライアントの情報を維持するのに有用である。これ以外に更にはオブジェクトのバインドとイベント通知に就いても、我々は既に学習してきた。
三番目はアプリケーション単位で情報を共有するものである。これはアプリケーションの設計に極めて有用なものである。データベースよりは手軽でかつ高速なアクセスが可能である。但し分散環境では使えない。
今回我々はアプリケーション(コンテキスト)単位でオブジェクトの共有メカニズムが存在することを知った。次の節から、今まで実習していないRequestDispatcherとServletContextによる情報のサーブレット間共有を実際に経験することにする。