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メソッドを追加して、次のようにプログラムを入力してください。
- package test.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- 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>");
- }
- }
〇 Webアプリケーション設定ファイルの編集
web.xmlに次の内容を追加してください。
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1">
(そのほかの記述…)
- <servlet>
- <servlet-name>SessionTest</servlet-name>
- <servlet-class>test.servlet.SessionTest</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>SessionTest</servlet-name>
- <url-pattern>/sessiontest</url-pattern>
- </servlet-mapping>
○ ファイル
結果を表示するJSPファイルを作成します。プロジェクトに次のようなファイルを追加してください。
サンプルダウンロード
○ プログラム
次のようにプログラムを入力してください。
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%
- //Sessionオブジェクトを取得
- HttpSession hs = request.getSession();
- %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD Html 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Sessionデーデータを受信</title>
- </head>
- <body>
- <%= hs.getAttribute("data") %>
- </body>
- </html>
○ 実行結果
http://localhost:8080/WebApp/sessiontest
実行結果
○ 解説
SessionTest.javaの21行目でSessionオブジェクトを取得しています。そして24行目でSessionオブジェクトのsetAttributeメソッドを使ってSessionにデータを保存しています。保存する際、キー名とデータを引数に指定します。
SessionTest.jspの5行目でSessionオブジェクトを取得しています。そして15行目でgetAttribute()メソッドを使ってSessionのデータを取得しています。取得する際、保存時に指定したキー名を指定します。
前へ 次へ