最近在项目中恰好需要在 session time out 的时候, 取出某些attribute的value, 做一些善后工作, 要用到 HttpSession Listener, 在网上查到些许资料, 为了方便故,整理一下,写在这里,算是为自己做个汇总, 多有引用,参考帖子的地址附在最后,方便查阅
HttpSession 的 Listener 大致有一下几种:
- Implementations of this interface are notified of changes to the list of active sessions in a web application. To receive notification events, the implementation class must be configured in the deployment descriptor for the web application. 这个 interface 包括两个方法, ( se), ( se), 从这两个方法的名字就可以看出, 这个 listener 监听的是 session 的创建和销毁, 因为并不确定在调用sessionDestroyed 方法时, session 里的 attribute 是否被 remove, (手头不便, 待验证), 所以并不确定该 listener 是否会满足我的需求, hold.
- This listener interface can be implemented in order to get notifications of changes to the attribute lists of sessions within this web application. 这个 listener 里共有三个方法 ( se), ( se) 和 ( se) . 同样,顾名思义,这个 listener 监听的是 session 中 attribute 的变化 ( 在timeout 时会调用 ), 这个 listener 符合我的需求,但是会在每次 attribute 改变的时候调用, 所以不确定在效能上产生多大的影响, hold.
- Causes an object to be notified when it is bound to or unbound from a session. The object is notified by an object. This may be as a result of a servlet programmer explicitly unbinding an attribute from a session, due to a session being invalidated, or due to a session timing out. 这个 listener 包括两个方法 ( event) 和 ( event) . 这个 listener 的使用大致是, 倘若我们已经创建了一个实现了该接口的类的实例,当这个实例被 bound 到session 或者被 unbound 的时候, valueBound 和 valueUnbound 就会被调用, 看起来不错,比较接近我的需求, 因为我所需要使用的 attribute 仅仅会在session 开始和结束时, 才会发生bind 和 unbind 操作, 暂 hold.
- Objects that are bound to a session may listen to container events notifying them that sessions will be passivated and that session will be activated. A container that migrates session between VMs or persists sessions is required to notify all attributes bound to sessions implementing HttpSessionActivationListener. 这个 listener 包括两个方法 ( se) 和 ( se), 当对象被bound的某个 session 已经被 activated 或者即将被 passivated 时被调用. 说实话虽然字面看懂了,但真心不知道什么时候用,唉,求指教啊!
从上面的说明,我们也可以了解到这些listener的使用方法,前两种 listener 定义好实现接口的类后,需要配置web.xml
< listener > < listener-class >com.abc.MyListener </ listener-class > </ listener > .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }后面两种实现了接口,将实现接口的类的object 直接设入 session 的 attribute 里即可.
具体一些listener的例子,可以直接参看下面的链接, 的示例
真正需要实现的时候,因为我们采用的是springframework,所以还需要参考 的另外一篇范例 “"
感谢所有发问解答提供了方便的前辈,多谢,哈哈!
参考资料如下: