0
HttpSession.isNew()について
http://www.javaroad.jp/servletjsp/sj_servlet6.htm
のページを見て勉強中です。
isNewの挙動が知りたくて以下のようなサーブレットを作り動作させました。
ボタンをクリックすると正しくカウントアップしますが、その後にアドレスバーをクリックしてEnterで再表示させると別セッションとして認識しているようです。ただ、IDは同じになっていました。
その後、ボタンをクリックすると先ほど(アドレスバー操作以前)のカウント値から継続してカウントアップされています。
F5でリロードすると再送信メッセージは出ますが、カウントアップされていました。
1)アドレスバーをクリックした時、(IDが同じなのに)なぜ同一セッションと認識できないのでしょうか。
2)アドレスバーをクリックした時に同一のセッションとして認識させるにはどの様にすれば良いのでしょうか。
環境:
tomcat 6.0.20
JDK 1.6.0_18
IE8
public class SessionServlet2 extends HttpServlet {
private final String attrCnt = "cnt";
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
func(req, res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{
func(req, res);
}
private void func(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{
String sCnt = "0";
long lCnt = 0;
String sId;
HttpSession hs1 = req.getSession();
sId = hs1.getId();
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<BODY>");
if (hs1.isNew()) {
hs1.setAttribute(attrCnt, sCnt);
out.println("New Page<br>");
} else {
sCnt = (String)hs1.getAttribute(attrCnt);
if(sCnt == null){
sCnt = "0";
hs1.setAttribute(attrCnt, sCnt);
}
else{
lCnt = Long.parseLong(sCnt)+1;
if(lCnt < 100){
sCnt = Long.toString(lCnt);
hs1.setAttribute(attrCnt, sCnt);
}
}
}
out.println("Count:" + sCnt + "<br>");
out.println("Id:" + sId + "<br>");
out.println("<form method=\"post\" action=\"./SessionServlet\">");
out.println("<input type=\"submit\" value=\"SessionManagement\">");
out.println("</form>");
out.println("</BODY>");
out.println("</HTML>");
}
}