背景如下: 希望实现当用户点击 jsp 页面上的注销按钮时实现在数据库中保存用户注销的时间。另外如果用户没有正常退出,则在 session 超时时自动记录超时时候的时间。 仿照找到的关于利用 HttpSessionListener 实现在线人数统计的方法来处理:
对每一个正在访问的用户,
J2EE
应用服务器会为其建立一个对应的
HttpSession
对象。当一个浏览器第一次访问网站的时候,
J2EE
应用服务器会新建一个
HttpSession
对象,并触发
HttpSession
创建事件,如果注册了
HttpSessionListener
事件监听器,则会调用
HttpSessionListener
事件监听器的
sessionCreated
方法。相反,当这个浏览器访问结束超时的时候,
J2EE
应用服务器会销毁相应的
HttpSession
对象,触发
HttpSession
销毁事件,同时调用所注册
HttpSessionListener
事件监听器的
sessionDestroyed
方法。
下面是示例代码:
在
web.xml
文件中注册一个监听器:
在用户登录的时候,把用户的 id 使用 UserOnlineListener .setUserId (id) 的方法保存下来。当用户点击注销按钮的时候,调用 session.invalidate () 的方法清空 session ,就会触发监听器 sessionDestroyed(HttpSessionEvent event) 方法了,同样,如果用户非正常退出,则在 session 超时的时候,也会出发该方法。 |