1.sessionとは
sessionとは、複数のユーザがアクセスするWebアプリケーションで、各ユーザの状態の保存・ユーザの区別を行う機能です。ユーザの識別はセッションIDを使って行います。
まあ簡単に言うと、ログインからログアウトまでの情報を保持する機能ですね。
リクエストスコープと似ているため間違えやすい
javaでsessionを扱う際、リクエストスコープとごちゃ混ぜになる人もいるかと思いますが、リクエストスコープはリクエスト毎に生成され、レスポンスが返されるまで利用可能な機能で、セッションとは異なります。
リクエストスコープに関しては下の記事で解説しています。 続きを見る
【Java】リクエストスコープとは?取得や保存方法を解説します
2.sessionの使い方(getAttribute,setAttribute)
まずは、基本構文から勉強していきましょう。
セッションを使ってデータの格納や取得、削除などを行うときは基本的に次のようなコードを記載します。
基本構文1
【セッションに値を格納】
session.setAttribute("属性名(key)","値(value)")
基本構文2
【セッションに格納されている値の取得】
session.getAttribute("属性名(key)")
基本構文3
【セッションに格納されている値の削除】
session.removeAttribute("属性名(key)")
次に、セッションを実際に用いたコードを見ていきましょう。
(session.java)
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/session")
public class session extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//➀セッションの作成・取得
HttpSession session = request.getSession();
int i = 0;
String str = null;
//➁セッションに前回の値があった場合は取出して i に格納
if(session.getAttribute("session") != null) {
i = (int)session.getAttribute("session");
str = "holding a session";
}
//➂加算
i++;
//➃加算後の値をセッションへセット
if(i<=9)
session.setAttribute("session", i);
else {
session.removeAttribute("session");
i = 0;
str = "disposed a session";
}
//➄ブラウザへ表示
PrintWriter pw = response.getWriter();
pw.print("<html><body>");
pw.print("<h1>");
pw.print(i);
pw.print("</h1>");
if(i==1) str = "holding a session";
if(str != null) {
pw.print("<p>");
pw.print(str);
pw.print("</p>");
}
pw.print("</body></html>");
pw.flush();
pw.close();
}
}
上記コードは、次の動作を持つプログラムです。
- セッションに格納した数値を取得し、画面に表示する
- ページを更新するたびに格納数値に1を足して、10以上になると0にリセットされる
- セッションを取得したか破棄したかを文章で表示する
実行結果
画面を更新するたび、表示数字が+1され、数字が10以上になるとセッションを削除します。
※画面が更新されるたびにsession.javaは実行されます。
解説
- まず、セッションを開始・継続するには、HttpServletRequestのgetSessionメソッドを実行します。(session.java➀)
- セッションから、キーを指定して対象の値を取出します。(session.java➁)
※mapと同じで、セッションも(key,value)でデータを保持します。valueにデータが入り、keyはそのデータ識別するために使用します。 - keyを指定して、セッションに値を格納します。(session.java➂)
- もし、セッションに格納された値が10以上だった場合、セッションの対象データを削除します。(session.java➃)
- ブラウザ上に値を表示します(session.java➄)
以上で終わりとなります。お疲れ様でした!