WebSphere Application Server Network Deployment, Version 6.0.x   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows

             目次と検索結果のパーソナライズ化

サーブレットにおけるセッション管理の開発

このタスクについて

この情報は、 コーディング例 SessionSample.java と組み合わされて、 ユーザー独自のサーブレットにセッションをインプリメントするためのプログラミング・モデルを提供します。

プロシージャー

  1. HttpSession オブジェクトを取得します。

    セッションを取得するには、 Java サーブレット 2.3 API の javax.servlet.http.HttpServletRequest オブジェクトの getSession() メソッドを使用します。

    最初に HttpSession オブジェクトを取得すると、 セッション管理機能は、Cookies、URL 再書き込み、 または Secure Sockets Layer (SSL) 情報という 3 つの方法のいずれかを使用して、 セッションのトラッキングを設定します。

    セッション管理機能が Cookies を使用するとします。 このような場合には、 セッション管理機能は固有のセッション ID を作成し、 通常、それをブラウザーに Cookie として送り返します。 このユーザーからの (同じブラウザーでの) これ以降の要求は、セッション ID を含む Cookie を渡します。 セッション管理機能は、 この ID を使用して、 ユーザーの既存の HttpSession オブジェクトを検索します。

    コード・サンプルのステップ 1 では、 Boolean(create) が true に設定されているため、HttpSession オブジェクトがまだ存在しない場合には作成されます。 (サーブレット 2.3 API では、 ブール値を持たない javax.servlet.http.HttpServletRequest.getSession() メソッドはデフォルトで true に設定されており、 このユーザーに対してまだセッションが存在しない場合はセッションを作成します。)

  2. ユーザー定義のデータをセッションで保管および検索します。

    セッションが確立されると、 ユーザー定義データをセッションに追加したり、これらを検索したりすることができます。 HttpSession オブジェクトは、 任意の Java オブジェクトを追加、検索、および削除するために、 これと似たメソッドを java.util.Dictionary に持っています。

    コード・サンプルのステップ 2 では、 サーブレットは HttpSession から整数オブジェクトを読み取り、 これを増分してから書き戻します。 HttpSession オブジェクトの値を識別するには、任意の名前を使用できます。 コード・サンプルでは、sessiontest.counter という名前を使用しています。

    HttpSession オブジェクトはユーザーがアクセスする可能性のあるサーブレット間で共用されるので、 競合を避けるために、サイト全体での統一された命名規則を設定することを検討してください。

  3. (オプション) HttpSession オブジェクトのデータが入っている HTML 応答ページを出力します。
  4. セッション中にアクションが取られたことをユーザーにフィードバックします。 アクションが発生したことを示す HTML コードをクライアント・ブラウザーに渡すことができます。 例えば、 コード・サンプルのステップ 3 で、 セッション中にユーザーが Web ページにアクセスするたびに、 サーブレットはユーザーに戻す Web ページを生成し、sessiontest.counter の値を表示します。
  5. (オプション) リスナーに通知します。 セッションに保管された、javax.servlet.http.HttpSessionBindingListener インターフェースをインプリメントするオブジェクトは、 セッションが間もなく終了して無効なるという通知を受けます。 この通知を受け取ると、 セッション中に行われたデータ変更をデータベースに永続的に保管するなど、 セッション後の処理を実行することができます。
  6. セッションを終了します。 セッションを終了するには、次のようにします。
    • セッションが指定された時間だけ非アクティブである場合は、 セッション管理機能により自動的に終了します。 ある時間が経過するとセッションが無効になるという時間の長さを指定する方法は管理者が定めます。
    • サーブレットをコーディングし、 セッション・オブジェクトで invalidate() メソッドを呼び出して終了します。

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class SessionSample  extends HttpServlet {
  public void doGet (HttpServletRequest request, HttpServletResponse response) 	
       throws ServletException, IOException {


   // Step 1: Get the Session object
 
      boolean create = true;         
      HttpSession session = request.getSession(create);
 
   // Step 2: Get the session data value


      Integer ival = (Integer)              
      session.getAttribute ("sessiontest.counter");         
      if (ival == null) ival = new Integer (1);         
      else ival = new Integer (ival.intValue () + 1);           
      session.setAttribute ("sessiontest.counter", ival);       

   // Step 3: Output the page

      response.setContentType("text/html"); 
      PrintWriter out = response.getWriter(); 
      out.println("<html>");  
      out.println("<head><title>Session Tracking Test</title></head>");
      out.println("<body>");
      out.println("<h1>Session Tracking Test</h1>");
      out.println ("You have hit this page " + ival + " times" + "<br>");
      out.println ("Your " + request.getHeader("Cookie"));
      out.println("</body></html>");    
   }
}



関連概念
セッション
関連資料
HTTP セッション・マネージャーのトラブルシューティングのヒント
HTTP セッション: 学習用リソース
タスク・トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 10:13:28 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/tprs_sesi.html