Sessionの開始と終了

 Sessionは、WebサーバーとWebクライアントの間で確立されます。Sessionを使うことで複数の要求に対するデータを保管することができます。Sessionはクライアントから最初の要求があった時に確立されます。そして、次のいずれかで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メソッドを追加して、次のようにプログラムを入力してください。

  1. package test.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.servlet.http.HttpSession;
  9. public class SessionTest extends HttpServlet {
  10.  @Override
  11.  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  12.   //クライアントに出力する準備する
  13.   resp.setContentType("text/html; charset=utf-8");
  14.   PrintWriter pw = resp.getWriter();
  15.   //Sessionオブジェクトを取得する
  16.   HttpSession hs = req.getSession();
  17.   //Sessionにデータをセット
  18.   hs.setAttribute("data", "Sessionを使ってデータを渡す");
  19.   //クライアントにHtmlタグを書き出し
  20.   pw.println("<html>");
  21.   pw.println("<head>");
  22.   pw.println("<title>Sessionテスト</title>");
  23.   pw.println("</head>");
  24.   pw.println("<body>");
  25.   pw.println(" <a href=\"SessionTest.jsp\">次のページへ</a>");
  26.   pw.println("</body>");
  27.   pw.println("</html>");
  28.  }
  29. }

〇 Webアプリケーション設定ファイルの編集

 web.xmlに次の内容を追加してください。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5.   http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  6.   version="3.1">
(そのほかの記述…)
  1.  <servlet>
  2.   <servlet-name>SessionTest</servlet-name>
  3.   <servlet-class>test.servlet.SessionTest</servlet-class>
  4.  </servlet>
  5.  <servlet-mapping>
  6.   <servlet-name>SessionTest</servlet-name>
  7.   <url-pattern>/sessiontest</url-pattern>
  8.  </servlet-mapping>

○ ファイル

 結果を表示するJSPファイルを作成します。プロジェクトに次のようなファイルを追加してください。

ファイル名 SessionTest.jsp

サンプルダウンロード

○ プログラム

 次のようにプログラムを入力してください。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%
  4. //Sessionオブジェクトを取得
  5. HttpSession hs = request.getSession();
  6. %>
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD Html 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  8. <html>
  9. <head>
  10. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  11. <title>Sessionデーデータを受信</title>
  12. </head>
  13. <body>
  14.  <%= hs.getAttribute("data") %>
  15. </body>
  16. </html>

○ 実行結果

http://localhost:8080/WebApp/sessiontest

実行結果
実行結果

○ 解説

 SessionTest.javaの21行目でSessionオブジェクトを取得しています。そして24行目でSessionオブジェクトのsetAttributeメソッドを使ってSessionにデータを保存しています。保存する際、キー名とデータを引数に指定します。

 SessionTest.jspの5行目でSessionオブジェクトを取得しています。そして15行目でgetAttribute()メソッドを使ってSessionのデータを取得しています。取得する際、保存時に指定したキー名を指定します。

前へ   次へ