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

このタスクについて

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

手順

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

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

    最初に HttpSession オブジェクトを取得すると、 セッション管理機能は、Cookies、URL 再書き込み、 または Secure Sockets Layer (SSL) 情報という 3 つの方法のいずれかを使用して、 セッションのトラッキングを設定します。
    非推奨の機能 (Deprecated feature) 非推奨の機能 (Deprecated feature): SSL ID を使用したセッション・トラッキングは、WebSphere® Application Server バージョン 7.0 で非推奨になりました。 セッション・トラッキングを再設定し、Cookie の使用または URL 再書き込みを アプリケーションで有効に設定することが可能です。depfeat

    セッション管理機能が 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>");    
   }
}

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprs_sesi
ファイル名:tprs_sesi.html