(26) Javaでセッションを制御する。

投稿者: | 2022年11月16日

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();

カテゴリー: Java

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)