监听器

监听器是监听某些对象状态变化的组件。
被监听的对象为三个域对象:ServletRequest,HttpSession和ServletContext,分别可以监听它们自身的创建和销毁和它们对象属性的变化。
监听域对象本身创建和销毁需要实现的接口分别为:ServletRequestListener,HttpSessionListener,ServletContextListener。需要用类实现接口,然后重写方法,其中带有created或initialized的方法名的方法为创建时要执行的方法,带有destroy的方法名的方法为销毁时要执行的方法。另外需要要在工程下的Web.xml中配置该类文件,在<listener>标签中的<listener-class>中写入该类的位置。
监听域对象属性的变化需要实现的接口分别为:ServletRequestAttributeListener,HttpSessionAttributeListener,ServletAttributeContextListener,
需要实现接口然后重写方法,不同之处在于它有三个方法:attributeAdded(),attributeRemoved()和attributeReplaced(),分别对应着添加属性,删除属性与更改属性,在域中setAttribute(),如果键值和之前setAttribute()的相同,则视为修改。当然,它们同样需要在Web.xml中配置路径。
Session域对象感知监听器,它可以监视Session域中对象的状态,并做出回应。它总共可以监视四种状态,即绑定状态,解绑状态,钝化状态,活化状态。分别代表了对象被加入到Session域,对象被从Session域中移除,对象被持久化到了磁盘中,对象从磁盘中回到了Session的内存中。
绑定与解绑需要实现的接口为HttpSessionBindingListener,钝化与活化需要实现的接口为HttpSessionActivationListener和Serializable,可以通过context.xml(在META-INF下创建)来修改钝化时间,默认为1分钟。
下面是个实现监视Session域对象的钝化和活化的小例子:

package com.java.demo02;

import java.io.Serializable;

import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;

public class User implements HttpSessionActivationListener,Serializable{
		private String name;
		private int age;
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		public User(String name, int age) {
			super();
			this.name = name;
			this.age = age;
		}
		public User() {
			super();
		}
		//活化
		public void sessionDidActivate(HttpSessionEvent arg0) {
			 System.out.println("user活化了");
			
		}
		//钝化
		public void sessionWillPassivate(HttpSessionEvent arg0) {
			 System.out.println("user钝化了");
			
		}
		@Override
		public String toString() {
			return "User [name=" + name + ", age=" + age + "]";
		}
		
}

  

posted @ 2018-07-20 20:36  张锐0328  阅读(126)  评论(0编辑  收藏  举报