実際にセッションを監視してみます。以下がリスナーです。このHttpSessionAttributeListenerはweb.xmlには登録されているものとします。
package jp.co.confrage;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class SessionListener implements HttpSessionAttributeListener{
public void attributeAdded(HttpSessionBindingEvent arg0){
System.out.println("SessionAdd:" + arg0.getName() + ":" + arg0.getValue());
}
public void attributeReplaced(HttpSessionBindingEvent arg0){
System.out.println("SessionChange:" + arg0.getName() + ":" + arg0.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent arg0){
System.out.println("SessionRemove:" + arg0.getName() + ":" + arg0.getValue());
}
}
以下のような画面があり、送信ボタンを押すとサーブレットに処理が渡ります。
送信ボタンを押した時のサーブレットは以下のように登録、変更、削除しています。
package jp.co.confrage;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class TestServlet
*/
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public TestServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession(false);
request.setCharacterEncoding("windows-31j");
String input = request.getParameter("input");
session.setAttribute("INPUT", input);
session.setAttribute("INPUT", input + "a");
session.removeAttribute("INPUT");
response.setContentType("text/html; charset=windows-31j");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>test</title></head>");
out.println("<body>");
out.println(":::" + input + ":::");
out.println("</body></html>");
out.close();
}
}
以下、送信ボタン押下後の画面とコンソールです。コンソールにセッションの情報が表示されているのがわかります。