セッション(session)とは
sessionとは、複数のユーザがアクセスするWebアプリケーションで、各ユーザの状態の保存・ユーザの区別を行う機能で、ユーザの識別はセッションIDを使って行う。
複数のリクエスト・レスポンスにまたがってユーザーの識別とデータの管理をする仕組み
簡単に言うと、ログインからログアウトまでの情報を保持する機能。
セッションはクライアント毎に作成され、セッションが開始されるとセッションを識別するためのセッションIDをクライアントの保存し、また保存したい値をセッション変数としてサーバ側に保存する。クライアントに保存されるセッションIDはクッキー(Webページの利用履歴や入力情報などをテキストデータとしてWebブラウザに保存する仕組み)を利用して保存される。
ユーザーの識別とデータの管理
サーバー側(Servlet)でユーザーの識別とデータの管理をするには"doGet"メソッドや"doPost"メソッドの引数で渡されてくる「HttpServletRequest」インターフェースのオブジェクトであるセッションオブジェクトを生成する
HttpSession session = request.getSession();
getSessionメソッドは、サーブレットを要求してきたクライアントに対してセッションが既に開始されていればそのセッションを返す。また引数に"ture"を指定した場合にはセッションが開始されていなければ新規にセッションを開始した後でそのセッションを返し、"false"を指定した場合は、セッションが存在しない場合にはnullを返す。
またクライアントに対してセッションを取得する事も出来る
セッションを使ってデータの格納や取得、削除などを行うときは基本的に次のようなコードを記述する。
session.setAttribute("属性名(key)","値(value)")
session.getAttribute("属性名(key)")
session.removeAttribute("属性名(key)")
session.invalidate();
*セッションオブジェクトに格納するデータはObject型として使うのでキャストが必要になる場合がある
Strig name = (Strig)session.getAttribute("name")
サンプルコード
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
@WebServlet("/session")
public class SessionServlet extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {
// セッションオブジェクトの生成or取得
HttpSession session = req.getSession(true);
// セッションオブジェクトからcartを取得
ArrayList<String> booklist =
(ArrayList<String>)session.getAttribute("cart");
if(booklist == null){
booklist = new ArrayList<String>(); // 初回アクセス
} else {
req.setCharacterEncoding("utf-8"); // 2回目以降
String book = req.getParameter("book");
booklist.add(book);
}
session.setAttribute("cart", booklist);
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
out.println("<html><head>");
out.println("<title>注文画面</title>");
out.println("</head><body>");
out.println("<h2>商品を選択してください</h2>");
out.println("<form action=\"/javaweb/session\" method=\"post\">");
out.println("<select name=\"book\" size=\"1\">");
out.println("<option value=\"超絶わかるJava\">超絶わかるJava</option>");
out.println("<option value=\"小学生からはじめるJava\">小学生からはじめるJava</option>");
out.println("<option value=\"Oracle試験100%合格本\">Oracle試験100%合格本</option>");
out.println("</select><input type=\"submit\" value=\"追加\" /></form>");
out.println("<h2>カートの中身</h2>");
for(int i = 0; i < booklist.size(); i++){
out.println(booklist.get(i) + "<br/>");
}
out.println("</body></html>");
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {
doPost(req, res);
}
}
HttpServletRequestとHttpServletResponseについての詳しくはこの記事へ
参考記事