Webアプリケーションでセッションの属性を追跡する簡単な “HttpSessionAttributeListener”の例を次に示します。セッションの属性を監視したままにして、動作の追加、更新、削除を行いたい場合は、このリスナーを検討してください。

Javaソース

package com.mkyong;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class MyAttributeListener implements HttpSessionAttributeListener {

    @Override
    public void attributeAdded(HttpSessionBindingEvent event) {
        String attributeName = event.getName();
        Object attributeValue = event.getValue();
        System.out.println("Attribute added : " + attributeName + " : " + attributeValue);
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent event) {
        String attributeName = event.getName();
        Object attributeValue = event.getValue();
        System.out.println("Attribute removed : " + attributeName + " : " + attributeValue);
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent event) {
        String attributeName = event.getName();
        Object attributeValue = event.getValue();
        System.out.println("Attribute replaced : " + attributeName + " : " + attributeValue);
    }
}

web.xml

<web-app ...>
        <listener>
        <listener-class>com.mkyong.MyAttributeListener</listener-class>
    </listener>
</web-app>

どのように動作するのですか?

  HttpSession session = request.getSession();
  session.setAttribute("url", "mkyong.com");//attributeAdded() is executed
  session.setAttribute("url", "mkyong2.com");//attributeReplaced() is executed
  session.removeAttribute("url");//attributeRemoved() is executed

すべてのメソッドは引数として “HttpSessionBindingEvent”を受け入れます。したがって、このイベントをトリガした属性の名前と値を取得できます。