监听器的概念和作用
- 问题:
在Servlet技术中我们学习了Request、session、application作用域对象,其主要作用是实现数据在不同场景中的灵活流转。但是数据的具体流转过程我们是看不到的,比如作用域对象时什么时候创建和销毁的,数据是什么时候存取、改变和删除的。因为具体的流转过程看不到,所以也就无法再指定的时机对数据和对象进行操作,比如session销毁的时候,在线人数-1; - 解决:
使用监听器 - 概念:
Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HTTPSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件。 - 监听对象:
Request
Session
Application - 监听内容:
创建、销毁、属性改变事件。 - 监听作用:
监听作用域对象request、session、application的创建、销毁和内容的改变
在事件发生之前,之后进行一些处理,比如统计在线人数。 - 使用:
(1)创建一个实现了指定接口的java类
监听对象 | 实现接口 | 作用 |
---|---|---|
request | ServletRequestListener | 监听request对象的创建和销毁 |
request | ServletRequestAttributeListener | 监听request作用域数据变更 |
session | HttpSessionListener | 监听session对象的创建和销毁 |
session | HttpSessionAttributeListener | 监听session作用域数据变更 |
application | ServletContextListener | 监听application对象的创建和销毁 |
application | ServletContextAttributeListener | 监听application作用域数据变更 |
(2)在web.xml中配置监听器
<listener>
<listener-class>com.czxy.listener.MyListener</listener-class>
</listener>
监听器方法的使用(request为例)
public class MyListener implements ServletRequestListener,ServletRequestAttributeListener{
//ServletRequestListener,监听request创建和销毁
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("我被销毁了");
}
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("我被创建了");
}
//ServletRequestAttributeListener,监听request作用域改变
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("增加");
System.out.println("增加了一条数据:"+srae.getName()+":"+srae.getValue());
}
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("删除");
}
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("修改");
}
}
注意:
srae.getName():获取监听数据的键
srae.getValue():获取监听数据的值
- 类推:
session和application对象同样有这五个方法,可以在对应的对象创建、销毁、新增、删除、修改时做一些事情。如:在session对象创建时,说明有用户登录,一个新的用户信息被存入session,就可以对在线人数进行加一的操作;当session对象销毁时,说明用户退出,就可以对在线人数进行减一的操作。