【Java】オブジェクトのスコープとリクエストの属性の話

サーブレットを組み合わせたりすると、そのオブジェクトがどこで使えるのか?を意識しないといけないです。
つまり変数のスコープがあるように、オブジェクトのスコープを考える必要があります。

スコープの種類

リクエスト → サーブレットの処理をJSPで利用する、など一つのリクエスト単位
セッション → ショッピングカートのような同じクライアントに対して処理をする単位
アプリケーション → 同じWebアプリケーションの単位でクライアントは異なってもいい単位

それぞれを扱うためにJavaのクラスが用意されています。

リクエスト → javax.servlet.http.HttpServletRequestインタフェイス
セッション → javax.servlet.http.HttpSessionインタフェイス
アプリケーション → javax.servlet.ServletContextインタフェイス

この三つを利用するためには、次のメソッドを使います。

Object getAttribute(String name)
引数nameで登録されたオブジェクトを取得する
void setAttribute(String name, Object value)
引数valueで指定したオブジェクトをnameという名前で登録する
void removeAttribute(String name)
引数nameで指定したオブジェクトを削除する
Enumeration getAttributeNames()
登録されている名前の一覧を返す

いずれのスコープを使うにしても、このxxxAttributeというメソッドが重要になります。
それでは実際にリクエストのスコープでオブジェクトを保存し
サーブレット→サーブレットの値受け渡しをしてみます。

hogeプロジェクト→Java Resources:src→hogeパッケージ右クリック→ServletA/ServletBを新規作成
ServletA→ServletBと移り、データを渡します。

ServletAに書く

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {     // TODO Auto-generated method stub     request.setAttribute("message", "メッセージ");     RequestDispatcher d = request.getRequestDispatcher("/ServletB");       d.forward(request, response); }

ServletBに書く

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    // TODO Auto-generated method stub      String message = (String)request.getAttribute("message");    response.setContentType("text/plain; charset=Windows-31J");    response.getWriter().println("message = " + message);}
実行はServletA右クリック→Run As→Run on serverでした。

 

実行結果は次のようになります。

j2ee_09_01 

このように、ちゃんとデータをattributeを使って登録して呼び出せました。

category of Java:
【Java】サーブレット/JSPを書く勉強をするための環境について知っていること(一回目)
【Java】サーブレット/JSPを書く勉強をするための環境について知っていること(二回目)
【Java】開発環境を活用してサーブレットを書く。
【Java】サーブレットの基本的な話をする
【Java】JSPの話へと移る
【Java】JSPからサーブレットを呼び出す
【Java】パラメータを渡す
【Java】複数のサーブレットを組み合わせるための画面遷移の話

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です