0

我正在寻找一种方法来监视会话中存储了哪种数据。我知道有会话监听器,它有在创建或销毁会话时调用的方法,但是会话修改呢?当会话中的数据被修改时,是否有任何侦听器可以运行,例如。添加新值或修改旧值时?

4

2 回答 2

1

您需要实现 HttpSessionAttributeListener 并将其条目添加到 web.xml 中。它有 attrubuteAdded、attrubuteRemoved 和 attrubuteReplaced 等方法。

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.myapp.MyAttributeListener</listener-class>
</listener>

于 2013-08-08T12:56:56.877 回答
0

看看HttpSessionAttributeListener

可以实现此侦听器接口,以获取有关此 Web 应用程序中会话属性列表更改的通知。

请注意,虽然它可以通知您新对象被绑定或移除;它不会通知对已绑定对象的属性或元素所做的更改(例如,如果您将另一个元素添加到 中ArrayList)。但是,它会通知 `ArrayLlist 是否被替换

public class SessionModifcationListener implements HttpSessionAttributeListener {

    @Override
    public void attributeAdded(HttpSessionBindingEvent se) {

    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent se) {

    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent se) {

    }

}
于 2013-08-08T12:55:02.843 回答