监听器

Posted xgzzzy16

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监听器相关的知识,希望对你有一定的参考价值。

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中








































以上是关于监听器的主要内容,如果未能解决你的问题,请参考以下文章

监听器监听器使用

监听器Listener

Servlet监听器详解及举例

Listener监听器

监听器

监听器