ben*_*enz 34 session servlets listener
我正在阅读第一个JSP和servlet.通过不同类型的听众去,我碰到HttpSessionBindingListener和HttpSessionAttributeListener.
我在考虑两者之间的区别 - 我希望看到这两位听众在现实世界中的实际用法.我测试HttpSessionBindingListener的实施valueBound()和valueUnBound()-为什么会一个对象需要知道它是否已被添加或不呢?
我对实际用法感到很困惑.请帮助澄清一下.
Bal*_*usC 47
的HttpSessionBindingListener是要在其实例可以被存储在会话中,如已登录用户的类中实现.
例如
public class ActiveUser implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
logins.add(this);
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
logins.remove(this);
}
}
Run Code Online (Sandbox Code Playgroud)
当此实例ActiveUser被设置为会话属性时HttpSession#setAttribute(),valueBound()将调用该实例.当它被一个HttpSession#removeAttribute()或者一个会话无效删除,或者被另一个会话取代时HttpSession#setAttribute(),那么valueUnbound()将调用它.
以下是一些真实世界的用例:
的HttpSessionAttributeListener是被实现为广泛的应用@WebListener时被调用任何属性被添加,移除或在替换HttpSession.继续上面的ActiveUser例子,如果你不能修改ActiveUser要实现的类HttpSessionBindingListener(因为它是第三方左右),或者当你想在任意数量的类上使用"标记接口"时这是特别有用的,这样你可以在一个中心位置做听力工作.
@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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个真实世界的用例:
| 归档时间: |
|
| 查看次数: |
19459 次 |
| 最近记录: |