1.ServletContextListener:对servlet上下文的创建和销毁监听
2.ServletContextAttributeListener:监听servlet上下文属性的添加、删除和替换
3.HTTPSessionListener:对Session的创建和销毁监听
session的销毁有两种情况:1). session超时(可以在web.xml中通过<session-config>/<session-timeout>标签配置超时 时间);2). 通过调用session对象的invalidate()方法使session失效。
4.HttpSessionAttributeListener:对Session对象中属性的添加、删除和替换进行监听
5.ServletRequestListener:对请求对象的初始化和销毁进行监听。
6.ServletRequestAttributeListener:对请求对象属性的添加、删除和替换进行监听
上边6个类是java给我提供的监听的类,在使用时之间实现其接口,以及接口中方法即可
public class OnlinePerListener implements HttpSessionListener{ private int userCounter = 0; @Override public void sessionCreated(HttpSessionEvent session) { userCounter++; session.getSession().setAttribute("userCounter", userCounter); } @Override public void sessionDestroyed(HttpSessionEvent session) { userCounter--; session.getSession().setAttribute("userCounter", userCounter); } }
PS:无论是自己写的监听事件,还是使用java提供的监听,都需要在web.xml中对其进行配置
<listener> <listener-class>com.JavaListener.TestListener</listener-class> </listener>
下边写自己实现监听器:
监听器设计主要涉及三个组件
1.事件源:即事件发生的源头,例如一条狗,他可以发出动作。
2.事件对象:是对事件源的实例化,进而可以设置其相应的属性
3.事件监听器:用来监听事件源发出的动作。
/* * 创建事件源 */ public class Dog { //定义一个监听器对象,用来接收传递进来的事件监听器 private DogListener listener; public void registListener(DogListener dogListener){ this.listener=dogListener; } public void shout(){ if(listener!=null){ Even even = new Even(this); this.listener.doshout(even); } System.out.println("汪汪汪................"); } public void watch(){ if(listener!=null){ Even even = new Even(this); this.listener.dowatch(even); } System.out.println("狗会看门.............."); } }
public class TestListener implements DogListener{ public static void main(String[] args) { Dog dog = new Dog(); dog.registListener(new TestListener()); dog.shout(); dog.watch(); } @Override public void doshout(Even even) { //拿到事件源,可以进行操作 Dog dog = even.getDog(); System.out.println("叫之前的动作"); } @Override public void dowatch(Even even) { System.out.println("看门之前的动作"); } }