720 views
この記事は最終更新から 1123日 が経過しています。
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();
アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済2025-12-14: 0回 2025-12-13: 0回 2025-12-12: 1回 2025-12-11: 0回 2025-12-10: 0回 2025-12-09: 1回 2025-12-08: 1回