监听器
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("解绑");
}
}