一、Listener概述
- Listener主要用于对session、request、context等进行监控。
- Listener的概述
Java Web程序,使用Listener与Event完成相应事件的处理。 - Listener的使用
首先实现接口HttpSessionListener,
然后实现以下两个方法:
public void sessionCreated(HttpSessionEvent se)
public void sessionDestroyed(HttpSessionEvent se)
再配置文件:
<listener>
<listener-class>
xxx.yyy
</listener-class>
</listener>
一个web.xml中可以配置多个Listener。同一种类型的Listener也可以配置多个,
触发的时候服务器会顺次执行各个Listener的相应方法。
二、Listener的分类
- 监听对象的创建与销毁
HttpSessionListener、ServletContextListener、ServletRequestListener
分别用于监控session、context、request的创建与销毁。触发时机分别为:
HttpSessionListener:
监听session的创建与销毁。
创建session时执行sessionCreated(HttpSessionEvent se)方法。
超时或者执行session.invalidate()时
执行sessionDestroyed(HttpSessionEvent se)方法。
该Listener可用于收集在线者信息。
ServletContextListener:
监听context的创建与销毁。context代表当前的Web应用程序。
服务器启动或者热部署war包时
执行contextInitialized(ServletContextEvent event)方法。
服务器关闭时或者只关闭该Web时会
执行contextDestroyed(ServletContextEvent event)方法。
该Listener可用于启动时获取web.xml里配置的初始化参数。
ServletRequestListener:
监听request的创建与销毁。
用户每次请求request都会
执行requestInitialized(ServletRequestEvent event)方法。
request处理完毕自动销毁前
执行requestDestroyed(ServletRequestEvent event)方法。 - 监听对象的属性变化
另一类Listener用于监听session、context、request的属性变化,
接口名称格式为xxxAttributeListener,包括HttpSessionAttributeListener、
ServletContextAttributeListener、ServletRequestAttributeListener。
当被监听对象中添加、更新、移除属性时,
会分别执行xxxAdded()、xxxReplaced()、xxxRemoved()方法,
xxx分别代表session、context、request。 - 监听session内的对象
除了上面的6中Listener,还有两种Listener用于监控session内的对象,
分别是HttpSessionBindingListener与HttpSessionActivationListener。
它们的触发时机分别是:
HttpSessionBindingListener:
当对象被放到session里时
执行valueBound(HttpSessionBindingEvent event)方法。
当对象被从session里移除时
执行valueUnBound(HttpSessionBindingEvent event)方法。
对象必须实现该Listener接口。
HttpSessionActivationListener:
服务器关闭时,会将session里的内容保存到硬盘上,这个过程叫做钝化,
会执行sessionWillPassivate(HttpSessionEvent se)方法。
服务器重新启动时,会将session内容从硬盘上重新加载,
会执行sessionDidActivate(HttpSessionEvent se)方法。
对象必须实现该Listener接口。
这两种Listener常用于实现session内的对象对session的监听。
三、Listener使用案例
- 单态登录
单态登录,或者称为单一登录,就是一个账号只能在一台机器上登录,
如果在其他机器上登录了,则原来的登录自动失效。
单态登录的目的是防止多台机器同时使用一个账号。 - 显示在线用户
使用Listener记录服务器的信息,包括启动时间、
累计访问人数、最大同时在线人数以及发生的时间、
当前用户数以及当前登录的用户数等,并列出所有的在线用户信息,
包括账号、第一次访问时间、最后一次访问时间、访问次数以及IP地址等。