※ ChatGPTを利用し、要約された質問です(原文:javaサーブレット sessionの使い方)
javaサーブレット sessionの使い方
このQ&Aのポイント
javaサーブレットを使用して、セッションを使ってデータの受け渡しを行いたい場合、ページ移動が増えるとデータが上手く受け渡せない問題が発生します。
jsp→Servlet のみでテストした場合は正常に動作するが、ページを増やすと値が正しく更新されない。
セッションが管理されていない場合、データを登録して初回用メッセージを表示し、管理されている場合はデータを表示する。NS1.javaとNS2.javaでデータを受け渡しし、値が2つ増えるはずなのに1つも増えない。
sessionを使ってデータの受け渡しをしたいのですが、ページ移動が増えると上手く受け渡せ無くて困っています。
jsp→Servlet のみでテストした時は正常に動いたのですが、ページを増やすと値が上手く更新されないのです。
下のプログラムではjspでセッションを開始して、ボタンを押すことでNS1.javaに移動し値を1増やしてNS2.javaに移動します。NS2.javaでも値を1増やしているので結果的に2つ値が増えるはずなのに1つも増えません。
何が悪いのでしょうか。解決策を教えて下さい。
// NStest.jsp
<%@ page contentType="text/html;charset=Windows-31J" %>
<html>
<head>
<title>移動</title>
</head>
<body>
<%
// isNewメソッドでセッション管理されているか確認します。
if (session.isNew()) {
// セッション管理されていない場合、データを登録します。
session.setAttribute("count", 0);
// 初回用メッセージ
out.println(" Nice to meet you.");
} else {
// セッション管理されている場合、データを表示します。
out.println("count: " + session.getAttribute("count"));
}
%>
<form method="POST" enctype="multipart/form-data"
action="NS1">
<INPUT type="SUBMIT" name="button1" value="移動">
</form>
</body>
</html>
// NS1.java
package NStest;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class NS1 extends HttpServlet {
public void doPost (HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
// 出力形式等の設定
ServletContext context = this.getServletContext();
response.setContentType("text/html;charset=Windows-31J");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(false);
String message;
if (null == session) {
// nullが返ってくる場合はセッションが作成されていない
session.setAttribute("count", 0);
out.println("セッションが開始されていません。");
} else {
// セッションインスタンスからcountの値を取得して表示
// 1加算してふたたび保存
Integer count = (Integer)session.getAttribute("count");
session.setAttribute("count", 1 + count.intValue());
message = "ページカウント: " + count;
out.println(message);
}
// 処理後はNS2.javaにリダイレクト
response.sendRedirect("NS2.java");
}
}
// NS2.java
package NStest;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class NS2 extends HttpServlet {
public void doPost (HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
// 出力形式等の設定
ServletContext context = this.getServletContext();
response.setContentType("text/html;charset=Windows-31J");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(false);
String message;
if (null == session) {
// nullが返ってくる場合はセッションが作成されていない
session.setAttribute("count", 0);
out.println("セッションが開始されていません。");
} else {
// セッションインスタンスからcountの値を取得して表示
// 1加算してふたたび保存
Integer count = (Integer)session.getAttribute("count");
session.setAttribute("count", 1 + count.intValue());
message = "ページカウント: " + count;
out.println(message);
}
}
}
お礼
お礼が遅くなり申し訳ありませんでした。 ご指摘の点を修正したところ正常に動きました! 本当に助かりました。ありがとうございます。