gpt4 book ai didi

session - HttpSessionBindingListener 和 HttpSessionAttributeListener 的实际用法

转载 作者:行者123 更新时间:2023-12-02 07:23:37 24 4
gpt4 key购买 nike

我正在通读 JSP 和 servlet。通过不同类型的监听器,我遇到了 HttpSessionBindingListenerHttpSessionAttributeListener

我正在考虑两者之间的区别 - 我想看看这两个听众在现实世界中的实际用法。我通过实现 valueBound()valueUnBound() 测试了 HttpSessionBindingListener - 为什么对象需要知道它是否已添加?

我对实际用途很困惑。请帮助澄清这一点。

最佳答案

HttpSessionBindingListener是在其实例可能存储在 session 中的类上实现的,例如登录的用户。

例如

public class ActiveUser implements HttpSessionBindingListener {

@Override
public void valueBound(HttpSessionBindingEvent event) {
logins.add(this);
}

@Override
public void valueUnbound(HttpSessionBindingEvent event) {
logins.remove(this);
}

}

当此 ActiveUser 的实例被 HttpSession#setAttribute() 设置为 session 属性时,valueBound() 将是调用。当它被 HttpSession#removeAttribute() 删除,或者 session 无效,或者被另一个 HttpSession#setAttribute() 替换时,valueUnbound () 将被调用。

以下是一些现实世界的用例:

HttpSessionAttributeListener将作为应用程序范围的 @WebListener 实现,当在 HttpSession 中添加、删除或替换任何属性时,它会被调用。继续上面的 ActiveUser 示例,如果您无法修改 ActiveUser 类来实现 HttpSessionBindingListener(因为它是第 3 方或so),或者当您想在任意数量的类上使用“标记接口(interface)”以便您可以在一个中心位置完成监听工作时。

@WebListener
public class ActiveUserListener implements HttpSessionAttributeListener {

@Override
public void attributeAdded(HttpSessionBindingEvent event) {
if (event.getValue() instanceof ActiveUser) {
logins.add(event.getValue());
}
}

@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
if (event.getValue() instanceof ActiveUser) {
logins.remove(event.getValue());
}
}

@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
if (event.getValue() instanceof ActiveUser) {
logins.add(event.getValue());
}
}

}

这是一个现实世界的用例:

关于session - HttpSessionBindingListener 和 HttpSessionAttributeListener 的实际用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17776704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com