java中的监听事件

java监听器实现的类
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("看门之前的动作");
		
	}
}



posted @ 2018-01-24 13:39  非我非非我  阅读(1082)  评论(0编辑  收藏  举报