javaサーブレット sessionの使い方
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);
}
}
}
補足
使用しているのはアドバンス版です。 現在WebSphere4.0に移行しているので特には問題とはならないのですが、切り分けがつかない原因不明のバグだったために、スッキリさせたかったのですが... ありがとうございました。