HttpSessionBindingListener和HttpSessionAttributeListener的实际使用
我正在阅读headfirstjsp和servlet。通过不同类型的侦听器,我遇到了HttpSessionBindingListener和HttpSessionAttributeListener的实际使用,session,servlets,listener,Session,Servlets,Listener,我正在阅读headfirstjsp和servlet。通过不同类型的侦听器,我遇到了httpsessionbindingstener和HttpSessionAttributeListener 我在想这两者之间的区别——我想看看这两位听众在现实世界中的实际用法。我通过实现valueBound()和valueUnBound()测试了httpsessionbindingstener——为什么一个对象需要知道它是否已被添加 我对实际用法感到相当困惑。请帮助澄清这一点。将在其实例可能存储在会话中的类(如登录
httpsessionbindingstener
和HttpSessionAttributeListener
我在想这两者之间的区别——我想看看这两位听众在现实世界中的实际用法。我通过实现valueBound()
和valueUnBound()
测试了httpsessionbindingstener
——为什么一个对象需要知道它是否已被添加
我对实际用法感到相当困惑。请帮助澄清这一点。将在其实例可能存储在会话中的类(如登录用户)上实现
例如
当HttpSession\setAttribute()
将此ActiveUser
的实例设置为会话属性时,将调用valueBound()
。当它被HttpSession#removeAttribute()
删除,或会话的无效,或被另一个HttpSession#setAttribute()
替换时,将调用valueUnbound()
以下是一些真实世界的用例:
@WebListener
实现,当HttpSession
中添加、删除或替换任何属性时,将调用该属性。继续上面的ActiveUser
示例,如果您无法修改ActiveUser
类来实现httpsessionbindingstener
(因为它是第三方),或者当您想要使用“标记接口”时,这将特别有用在任意数量的课堂上,这样你就可以在一个中心位置完成听力工作
@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());
}
}
}
下面是一个真实的用例:
HttpSessionBindingListener
方法帮助您保持对象与数据库同步,反之亦然。@BalusC-那么,如果客户登录到他的电子购物帐户信息页面,是否会有某种javascript/js
对象
从db加载所有这些信息以防止重复点击db?当用户编辑其家庭地址时,该对象将用于更新数据库?
@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());
}
}
}