1 监听器的定义
Servlet规范中定义的一种特殊类
用于监听ServletContext HttpSeesion 和 - - ServletRequest等域对象的创建与销毁事件
用于监听域对象的属性发生改变的事件
可以在事件发生前、发生后做一些必要的处理
2 监听器的用途
统计在线人数和在线用户
系统启动时加载初始化信息
统计网站访问量
跟spring结合
3 第一个实例讲解
步骤:
1.创建一个实现监听器接口的类
// 创建一个实现接口xxxListenner的类
public class FirstListenner implements ServletContextListener {
// 自动重写里面的方法
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("contextDestroyed");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("contextInitialized");
}
}
2.配置web.xml进行注册或者在类上面加注解@WebListener(3.0以上版本才能用)
<listener>
<listener-class>com.fs.listenner.FirstListenner</listener-class>
</listener>
监听器的启动顺序:
1.web.xml可以注册多个监听器,他的加载顺序是按照注册顺序来的
2.web.xml里面可以注册监听器、过滤器(拦截器是spring的功能)、servlet,他们的加载顺序是:监听器>过滤器>servlet
4 监听器的分类
按监听的对象划分
1.用于监听应用程序环境对象(ServletContext--主要用于获取和设置全局属性配置)的事件监听器
2.用于监听用户会话对象(HttpSession--统计在线人数、记录访问日志)的事件监听器
3.用于监听请求消息对象(ServletRequest--读取参数、记录访问历史)的事件监听器
按监听的事件划分
1.监听域对象自身的创建和销毁的事件监听器
2.监听域对象中的属性的增加或删除的事件监听器
3.监听绑定到HttpSession域中的某个对象的状态的事件监听器
要监听对象的绑定<-->解除绑定,那么该类就要实现HttpSessionBindingListerner接口
要监听对象的钝化<-->活化(内存<-->硬盘),那么该类就要实现HttpSessionActivationListener和Serialization接口
5 实际项目中常用案例:统计在线人数及用户
逻辑:
1.统计在线人数很简单:
创建一个session监听类
定义一个数字代表在线人数
当session创建时++
当session销毁时--
把这个数字放到application中,这样就可以从application中取出在线人数了
2.统计用户
如何确定一个用户呢?ip地址。如何获得ip地址呢?那就要通过request了
创建一个request监听类、用户类(ip,createTime,sessionId)
定义一个List<user>
当request创建的时候,我们先要判断seesionId是否存在,如果不存在,就要创建一个user放到List中
而要移除user,得session销毁时才表示该用户不活跃了,所以移除user的在session中去进行
将List放到application中