@634

Servlet - セッション

Advertisement

セッション管理のメカニズム

HTTP プロトコルではクライアントがリクエストを送り、サーバーがレスポンスを返す。という処理を行った時点でセッションが切断されるため、サーバーはどのリクエストがどのクライアントから来たものなのか、判断することができない。

これを解決するためにサーブレットではセッション管理のメカニズムが用意されている。

サーブレットでのセッション管理の手順

サーブレットでセッション管理を行うための手順を示す。
  1. クライアントはサーバーにリクエストを送る
  2. サーバーは一意のセッションIDを作成し、クライアントに通知する。
  3. クライアントはサーバーに対して取得したセッションIDを送ることで、サーバーは先程のリクエストと同じセッションだということを判断する。セッションIDはクライアントのクッキーに保存される。
この仕組みでセッションを維持することにより、セッション間のデータの保存などを容易に実現することができる。

サンプルコード

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

public class SessionSample extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/plain; charset=Shift_JIS");

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

        //セッションに保存されているデータの取得。
        String mozi = (String)session.getAttribute("string");

        if(mozi == null){
            mozi = "+";
        }else{
            mozi = mozi + "+";
        }

        // セッションにデータを格納する
        session.setAttribute("string", mozi);

        PrintWriter out = response.getWriter();
        out.println("sessionID:" + session.getId());
        out.println(mozi);
    }
}
このプログラムの流れ
  1. サーブレットは HttpServletRequest オブジェクトを使用して HttpSession オブジェクトを取得する。この際、まだセッションが確立されていなければ新たにセッションを確立する。すでにセッションが確立済みならセッションIDを使用して、確立済みのセッションを取得する。
  2. 次に取得した HttpSession オブジェクトの getAttribute() メソッドを使用して、セッションから値を抽出する。※値が格納されていない場合、NULLが返る
  3. セッションに値を格納する場合、 HttpSession オブジェクトの setAttribute() メソッドを使用する。
サーバ側ではセッションIDごとに記憶用の領域を確保するため、複数のセッションが存在しても値が混同することはない。
セッション
図:セッションごとに値が保持される。

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール