Day 33 监听器

监听器

1. 监听器

特殊的组件,用来监听web应用的事件

2. 分为两大类:8种

和对象创建销毁相关
ServletContextListener:处理web应用的上下文接口
ServletRequestListener:处理request对象的创建和销毁的接口
HttpSessionListener:处理session对象的创建和销毁的接口

和对象属性变化相关
ServletContextAttributeListener
ServletRequestAttributeListener
HttpSessionAttributeListener

/**
 * ServletContextAttributeListener处理和属性相关的事件
 *
 */
@WebListener
public class DemoServletContextAttributeListener implements ServletContextAttributeListener {
    public DemoServletContextAttributeListener() {
        // TODO Auto-generated constructor stub
    }
	//当添加属性触发事件
    public void attributeAdded(ServletContextAttributeEvent arg0)  { 
         System.out.println("attributeAdded");
    }
     //当删除属性触发事件
    public void attributeRemoved(ServletContextAttributeEvent arg0)  { 
    	System.out.println("attributeRemoved");
    }	
    //当属性发生变化
    public void attributeReplaced(ServletContextAttributeEvent arg0)  { 
    	System.out.println("attributeReplaced");
    }
}

3. ServletContext

事件源:
事件处理方法:xxxxListener
监听到事件:

@WebListener表示创建DemoServletContextListener对象
 * 当web应用被加载到服务器时,调用contextInitialized方法处理
 * 当web应用从服务器上下载或服务器关闭,调用contextDestroyed方法处理
 * 实现ServletContextListener接口的监听器类,监听的是web应用的创建和销毁的事件
 *
 */
@WebListener
public class DemoServletContextListener implements ServletContextListener {}

4. session对象的活化和钝化:服务器暂时性的停止

和session无关,和session存储的对象(实现了序列化)有关
钝化:session中的对象临时存储到硬盘;
活化:session中对象从硬盘恢复到内存;
在session的生命周期内可以从恢复到内存的session中获取原来的对象

实现过程,session存储的对象实现HttpSessionActivationListener接口
public class Student implements 
								Serializable,
								HttpSessionActivationListener{
	private static final long serialVersionUID = -4577059316849052250L;
	private String name;
	@Override
	public String toString() {
		return "Student [name=" + name + "]";
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Student(String name) {
		super();
		this.name = name;
	}
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	//活化
	@Override
	public void sessionDidActivate(HttpSessionEvent arg0) {
		System.out.println("sessionDidActivate活化");
	}
	//钝化
	@Override
	public void sessionWillPassivate(HttpSessionEvent arg0) {
		System.out.println("sessionWillPassivate钝化");
	}
}

5. 对象的绑定和解除绑定:应用在线列表

当session添加属性时,出发绑定事件,执行valueBound方法
当session失效,或者删除属性时,触发解除绑定事件,执行valueUnBound方法

public class Person implements
Serializable,
HttpSessionBindingListener{
	private String name;

	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Person(String name) {
		super();
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + "]";
	}
	//绑定属性的方法
	//session.setAttribute();
	@Override
	public void valueBound(HttpSessionBindingEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("绑定");
	}
	//解绑
	//session.removeAttribute();
	//session.invalidate();
	@Override
	public void valueUnbound(HttpSessionBindingEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("解绑");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值