JavaWeb--监听器
@TOC
一、监听器的概念
在讲解我们web应用的监听器之前,我们可以先来了解一下在现实生活中监听流程是怎么样的。
现实生活中,监听器是指专门用来对其他对象身上发生的事件或者状态改变进行监听和相应处理的对象,当被监视的对象发生变化的时候,立即采取相应的行动
那么在我们的应用中,监听器是什么呢?
监听器是Servlet规范中定义的一种特殊类
- 用来监听ServletContext、HttpSession和ServletRequest等域对象的创建和销毁事件
- 用来监听域对象的属性发生修改的事件
- 可以在事件发生前、发生后做一些必要的处理
正式学习之前,我们先来看一下监听器有什么样的用途
二、监听器的用途
- 统计在线人数和用户
- 系统启动的时候加载初始化信息
- 统计网站的访问量
- 和Spring相结合
三、监听器的分类
我们知道在电视中,我们经常看到那些谍战片里面,有间谍会进行潜伏,然后放窃听器来进行监听,比如监听别人的电话等等。他们想要监听,肯定要先有监听的目标也就是被监听的对象,在web应用中就是request,session,servletContext等域对象,也被称为事件源。既然想要监听,肯定要借助一些工具来监听,不然怎么能进行监听,所以要有监听器,当我们监听的对象状态发生变化我们都可以监听到。但是如果他没有做事情,我们肯定也就监听不到任何的东西,在web应用中,方法调用,属性改变,状态改变等称为事件
接下来,我们就来正式的来学习监听器了。
Servlet规范中定义了9个监听器接口,可以用来监听ServletContext、HttpSession 和 ServletRequest 对象的生命周期和属性变化事件。
这些监听器接口都以listener结尾
监听器Listener按照监听的事件可以分成3大类
- 1.监听对象创建和销毁的监听器
- 2.监听对象中属性变更的监听器
- 3.监听 HttpSession 中的对象状态改变的监听器
监听对象创建和销毁的监听器
事件源 | 监听器 | 监听器描述 | 创建和销毁方法 | 调用时机 |
---|---|---|---|---|
ServletContext | ServletContextListener | 用于监听 ServletContext 对象的创建与销毁过程 | void contextInitialized (ServletContextEvent sce) | 当创建 ServletContext 对象时 |
void contextDestroyed (ServletContextEvent sce) | 当销毁 ServletContext 对象时 | |||
HttpSession | HttpSessionListener | 用于监听 HttpSession 对象的创建和销毁过程 | void sessionCreated (HttpSessionEvent se) | 当创建 HttpSession 对象时 |
void sessionDestroyed (HttpSessionEvent se) | 当销毁 HttpSession 对象时 | |||
ServletRequest | ServletRequestListener | 用于监听 ServletRequest 对象的创建和销毁过程 | void requestInitialized (ServletRequestEvent sre) | 当创建 ServletRequest 对象时 |
void requestDestroyed (ServletRequestEvent sre) | 当销毁 ServletRequest 对象时 |
监听对象中属性变更的监听器
事件源 | 监听器 | 监听器描述 | 方法 | 调用时机 |
---|---|---|---|---|
ServletContext | ServletContextAttributeListener | 用于监听 ServletContext 对象的属性新增、移除和替换 | public void attributeAdded (ServletContextAttributeEvent scae) | 当 ServletContext 对象中新增一个属性时 |
public void attributeRemoved (ServletContextAttributeEvent scae) | 当删除 ServletContext 对象中的一个属性时 | |||
public void attributeReplaced (ServletContextAttributeEvent scae) | 当 ServletContext 对象中的某个属性被替换时 | |||
HttpSession | HttpSessionAttributeListener | 用于监听 HttpSession 对象的属性新增、移除和替换 | public void attributeAdded (HttpSessionBindingEvent hsbe) | 当 HttpSession 对象中新增一个属性时 |
public void attributeRemoved (HttpSessionBindingEvent hsbe) | 当删除 HttpSession 对象中的一个属性时 | |||
public void attributeReplaced (HttpSessionBindingEvent hsbe) | 当 HttpSession 对象中的某个属性被替换时 | |||
HttpServletRequest | ServletRequestAttributeListener | 用于监听 HttpServletRequest 对象的属性新增、移除和替换 | public void attributeAdded (ServletRequestAttributeEvent srae) | 当 HttpServletRequest 对象中新增一个属性时 |
public void attributeRemoved (ServletRequestAttributeEvent srae) | 当删除 HttpServletRequest 对象中的一个属性时 | |||
public void attributeReplaced (ServletRequestAttributeEvent srae) | 当 HttpServletRequest 对象中的某个属性被替换时 |
监听HttpSession中的对象状态改变的监听器
Session 中的对象可以有多种状态:绑定到 Session 中、从 Session 中解除绑定、随 Session 对象持久化到存储设备中(钝化)、随 Session 对象从存储设备中恢复(活化)。
Servlet 规范中定义了两个特殊的监听器接口,用来帮助对象了解自己在 Session 中的状态:HttpSessionBindingListener 接口和 HttpSessionActivationListener 接口 ,实现这两个接口的类不需要进行注册。
事件源 | 监听器 | 监听器描述 | 方法 | 调用时机 |
---|---|---|---|---|
HttpSession | HttpSessionBindingListener | 用于监听 JavaBean 对象绑定到 HttpSession 对象和从 HttpSession 对象解绑的事件 | void valueBound (HttpSessionBindingEvent event) | 当对象被绑定(添加)到 HttpSession 对象中时 |
void valueUnbound (HttpSessionBindingEvent event) | 当对象从 HttpSession 对象中解除绑定(移除)时 | |||
HttpSessionActivationListener | 用于监听 HttpSession 中对象活化和钝化的过程 | void sessionWillPassivate (HttpSessionBindingEvent event) | 当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被钝化之前 | |
void sessionDidActive (HttpSessionBindingEvent event) | 当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被活化之后 |
注意:如果监听器是HttpSessionBindingLinstener,只有实现了这个监听器接口的对象存储到Session域的时候,才会触发绑定事件,但是一个类即使没有实现HttpSessionAttributeListener,那么当这个类的对象存储到Session域的时候,也是会触发事件
四、第一个监听器
步骤:
- 1.创建一个实现监听器接口的类
- 2.进行注册
- 可以使用web.xml进行注册
- 也可以用@WebListener注解来进行注册
- 注意:所有监听器的方法不需要我们去调用,服务器会进行调用。当某一个特殊事件发生的时候,服务器会自动调用
五、实现在线人数统计
https://blog.csdn.net/qq_40241957/article/details/97906977?spm=1001.2014.3001.5506
- 点赞
- 收藏
- 关注作者
评论(0)