306 views
この記事は最終更新から 821日 が経過しています。
1. やりたいこと
Javaで書いた Webアプリでセッションに情報を保持しておきたい。
セッション情報は、サーバーの環境変数に保持される。
2. やってみた
実験の内容は以下の通り。
1) top.jsp を開くと、名前入力フォームが表示される。
↓
2) フォームから送信すると、サーブレット act1.java が受け取った情報(名前)をセッションに保存する。
↓
3) 別ウィンドウからサーブレット act2.java を開くと、セッション情報を参照して上記2)で保存した名前を表示する。
top.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Test007 Top</title> </head> <body> <form action="/Test007/act1" method="post"> <p><input type="text" name="name"></p> <p><input type="submit" value="決定"></p> </form> </body> </html>
act1.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; /** * Servlet implementation class act1 */ @WebServlet("/act1") public class act1 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public act1() { super(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); // Sessionに情報を追加 HttpSession ss = request.getSession(); ss.setAttribute("name", name); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("入力された名前 " + name + " を保存しました。"); } }
act2.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; /** * Servlet implementation class act2 */ @WebServlet("/act2") public class act2 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public act2() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Sessionから情報を取得 HttpSession ss = request.getSession(); String name = (String)ss.getAttribute("name"); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("前に入力された名前は " + name + " です。"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
3. セッション使用上の注意
(1) セッションの寿命
1) デフォルト状態では、Webブラウザを閉じるとセッションが閉じる。
→ Webブラウザ側がクッキーの情報を破棄する。
→ サーバー側はこれを検知できない。
2) デフォルト状態では、サーバー側(Apache Tomcat)は放置時間30分間でセッションを破棄する。
(2) セッション情報が不要になったら明示的に破棄する。
ログアウト実行時に以下を実行する。
session.invalidate();