Sessionの開始と終了
Sessionは、WebサーバーとWebクライアントの間で確立されます。Sessionを使うことで複数の要求に対するデータを保管することができます。Sessionはクライアントから最初の要求があった時に確立されます。そして、次のいずれかでSessionが切断されます。
- 一定時間が経過したとき
- クライアントでWebブラウザーを閉じたとき
- Session切断のメソッドが呼び出されたとき
■ Sessionの開始
Sessionは最初の要求時に確立されます。またSessionは、クライアントごとに確立されます。確立されたSessionに対してデータを保存することができます。そのSessionを取得するにはHttpServletRequestインタフェースのgetSessionメソッドを利用します。
■ Sessionの終了
Sessionは一定の時間が経つと自動的に切断されます。一定の時間はweb.xmlで設定できます。
<session-config>
<session-timeout>180</session-timeout>
</session-config>
また、SessionはHttpSessionクラスのinvalidateメソッドを利用して、任意に切断することができます。
○ ファイル
プロジェクトに次のようなServletを追加してください。
パッケージ名 | test.servlet |
---|---|
クラス名 | SessionTest |
スーパークラス名 | javax.servlet.http.HttpServlet |
○ プログラム
doGetメソッドを追加して、次のようにプログラムを入力してください。
SessionTest.java
- package test.servlet;
- 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("/sessiontest")
- public class SessionTest extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //クライアントに出力する準備する
- resp.setContentType("text/html; charset=utf-8");
- PrintWriter pw = resp.getWriter();
- // Sessionオブジェクトを取得する
- HttpSession hs = req.getSession();
- // Sessionにデータをセット
- hs.setAttribute("data", " Sessionを使ってデータを渡す");
- //クライアントにHTMLタグを書き出し
- pw.println("<html>");
- pw.println("<head>");
- pw.println("<title> Sessionテスト</title>");
- pw.println("</head>");
- pw.println("<body>");
- pw.println(" <a href=\"SessionTest.jsp\">次のページへ</a>");
- pw.println("</body>");
- pw.println("</html>");
- }
- }
○ ファイル
結果を表示するJSPファイルを作成します。プロジェクトに次のようなファイルを追加してください。
ファイル名 | SessionTest.jsp |
---|
○ プログラム
次のようにプログラムを入力してください。
SessionTest.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%
- //Sessionオブジェクトを取得
- HttpSession hs = request.getSession();
- %>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>Sessionデーデータを受信</title>
- </head>
- <body>
- <%= hs.getAttribute("data") %>
- </body>
- </html>
○ 実行結果
次のURLを入力して実行してみましょう。
http://localhost:8080/WebApp/sessiontest
○ 解説
SessionTest.javaの23行目で、Sessionオブジェクトを取得しています。そして26行目で、SessionオブジェクトのsetAttributeメソッドを使ってSessionにデータを保存しています。保存する際、キー名とデータを引数に指定します。Sessionオブジェクトは、Sessionが持続している間サーバーに保持されます。setAttributeメソッドで保存したデータは、Sessionが持続している間利用することができます。
SessionTest.jspの5行目で、HttpRequestServletオブジェクトのgetSessionメソッドでSessionオブジェクトを取得しています。そして14行目でSessionオブジェクトのgetAttribute()メソッドを使ってSessionのデータを取得しています。取得する際、保存時に指定したキー名を指定します。