////////////////////////////////////////////////////////////////////////////////
//  << sv141a.java >>
//
// サーブレット(4):セッション管理(開始と終了)
//
//  Webクライアントからのアクセスによりセッションを開始し、終了する。
//
// ●セッション管理
//
//  通常のWebの仕組みでは、Webクライアントからのひとつの要求に対して、
//  Webサーバのひとつの応答で終了してしまうので、同じWebクライアントからの
//  アクセスかどうかなどを区別することができない。
//  ところが、セッション管理機能を使うと、Webクライアントを識別し、Webクライア
//  ントごとの情報を管理できる。このため、複数のWebページに表示されている商品
//  を選び、購入することなどができるようになる。
//
//  ・セッションとは、アクセスしてきたWebクライアントとサーブレットとの対応を
//   意味し、HttpSessionオブジェクトで実現する。Webクライアントからの要求に
//   応じてサーブレットは、HttpSessionオブジェクトを作成し、一意のsessionIDを
//   割当て、サーブレット側で管理する。
//   再度、同じWebクライアントからアクセスされたサーブレットは、同じ
//   セッションをもつことになる。したがって、前回のアクセスの情報を継続できる。
//  ・セッションは、WebクライアントがWebブラウザを閉じるまで有効である。
//   一定時間Webクライアントからのアクセスがないとき、破棄される。
//  ・HttpSessionオブジェクトは、Webクライアントごとに生成され、メモリに常駐
//   する。したがって、メモリ節約のため、使わないHttpSessionオブジェクトは、
//   破棄するのがよい。
//
// ●セッション管理の手順
//  HttpServletRequestのオブジェクトからgetSessionメソッドを使って、
//  HttpSessionオブジェクトを取得する。
//
// ●javax.servlet.http.HttpSessionインターフェース
//  複数ページの閲覧を行うユーザを識別し、そのユーザについての情報を格納する
//  メソッドをもつ。
//
// ●HttpSessionインターフェースのメソッド
//    public String getId()
//      機能:セッションに割り当てられた一意のsessionIDを返す。
//    public void invalidate()
//      機能:セッションを無効にし、関連づけられていたオブジェクトを解放する。
//
// ●HttpServletRequestインターフェースのメソッド
//  public HttpSession getSession(boolean b)
//   機能:要求に関連付けられた現在のセッションを返す。
//            bがtrueの場合、
//       セッションが存在していないとき、新規に作成する。
//       セッションが存在しているとき、現在のセッションを返す。
//            bがfalseの場合、
//       セッションが存在していないとき、nullを返す。
//       セッションが存在しているとき、現在のセッションを返す。
//
// ●起動法
//  (1)Javaファイル(sv141a.java)をコンパイルし、classファイル(sv141a.class)を
//       作成する。
//       ただし、Javaファイル(sv141a.java)は、
//       %CATALINA_HOME%\webapps\SV\WEB-INF\classes\sv141a.java
//     classファイル(sv141.class)は、
//       %CATALINA_HOME%\webapps\SV\WEB-INF\classes\sv141a.class
//       に保存する。
//    (2)入力フォームで、
//         URL(http://localhost:8080/SV/servlet/sv141a)
//       を指定する。
//
////////////////////////////////////////////////////////////////////////////////

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

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

    // セッションオブジェクトの取得。
    HttpSession hs = request.getSession(true);

    // sessionIDの取得。
    String sid = hs.getId();

    // コンテンツタイプの指定。
    response.setContentType("text/html; charset=Shift_JIS");

    // HTML文書の出力。
    PrintWriter pw = response.getWriter();
    pw.println("<html>"                                    
             + "<head><title>サーブレット</title></head>"  
             + "<body>"                                    
             + "セッションの開始<br>"            
             + "sessionID:" + sid + "<br><br>");

    // セッションの破棄。
    hs.invalidate();

    pw.println("セッションの破棄<br><br>");
                     
    // 新たなセッションオブジェクトの取得。
    hs = request.getSession(true);

    // sessionIDの取得。
    sid = hs.getId();

    pw.println("新たなセッションの開始<br>"
             + "sessionID:" + sid + "<br>"
             + "</body>"                                   
             + "</html>");            
    pw.flush();
    pw.close();
  }
}
入力フォーム
<form action=http://localhost:8080/SV/servlet/sv141a method=POST>
  <input type=submit value=実行>
</form>
実行結果

実行後


更新をクリック後