HttpSessionAttributeListener実装メソッド
HttpSessionAttributeListenerインターフェースは、以下の2つのメソッドを実装する必要があります。

public void attributeAdded(HttpSessionBindingEvent arg0) {}
public void attributeReplaced(HttpSessionBindingEvent arg0) {}
public void attributeRemoved(HttpSessionBindingEvent arg0) {}
attributeAddedメソッド
attributeAddedはセッションにオブジェクトが登録された時のイベント処理を行うメソッドです。
attributeReplacedはセッションのオブジェクトが置換された時のイベント処理を行うメソッドです。
attributeRemovedはセッションのオブジェクトが削除された時のイベント処理を行うメソッドです。
いずれも、セッション操作時に別のセッションを操作したい際などに使用します。
以下、例です。

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSession;
  
public class sessionAttributeListener implements HttpSessionAttributeListener{
    public void attributeAdded(HttpSessionBindingEvent arg0){
        HttpSession session = arg0.getSession();
        if(arg0.getValue() instance of Sess1){
            // session1キーに登録しなおし
            session.setAttribute("session1",new Sess2());
        }
    }
  
    public void attributeReplaced(HttpSessionBindingEvent arg0){
        HttpSession session=arg0.getSession();
        if(arg0.getValue() instance of Sess1){
            // session1キーに登録しなおし
            session.setAttribute("session1",new Sess2());
        }
    }

  
    public void attributeRemoved(HttpSessionBindingEvent arg0){
        HttpSession session=arg0.getSession();
        if(arg0.getValue() instance of Sess1){
            // session1キーを削除
            session.removeAttribute("session1");
        }
    }
}
getValueメソッド
HttpSessionBindingEventのgetValueメソッドは、登録されたオブジェクト、又は置換される前のオブジェクト、又は削除さえれたオブジェクトを返すメソッドです。

web.xmlに記述
web.xmlには以下のように記述します。記述箇所も関係あるようですが詳しくはわかりません。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app>

  <listener>
      <listener-class>com.confrage.TEST.SessionListener</listener-class>
  </listener>

...
Sessionを監視する
実際にセッションを監視してみます。以下がリスナーです。この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(); 
    }

}
以下、送信ボタン押下後の画面とコンソールです。コンソールにセッションの情報が表示されているのがわかります。



Back to top

Information