监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。
一。注册监听器的两步:
1.实现某个监听器接口;
2.在web.xml中注册:如:
<listener>
<listener-class>com.oterman.listener.MyServletContextListener</listener-class>
</listener>
1.ServletContextListener:用来监听ServletContext对象的创建和销毁;可以在对应的方法中加入要实现的代码;
servlecontext的生命周期:tomcat服务器加载web应用的时候,创建该对象,web应用退出的时候,结束该对象;
2.ServletRequestListener:监听request对象的创建和销毁;
request对象的生命周期:每次请求都会创建request对象,请求完毕后销毁对象;
3.HttpSessionListener
Session的生命周期:调用request.getSession(),创建Session对象;
调用session对象上的invalidate()方法销毁对象;
设置超时时间,销毁对象,如:
<session-config>
<session-timeout>1</session-timeout>//一分钟后session挂掉;
</session-config>
三。用来监听三大作用域域属性变化的监听器
域属性变化包括:添加属性,替换属性,移除属性;
ServletContextAttributeListener(比上多一个attribute关键字);
1.HttpSessionBindingListener
javabean被加入和移除时,会触发该监听器;
2.HttpSessionActivationListener
javabean随 Session 对象持久化到一个存储设备中(钝化)和随 Session 对象从一个存储设备中恢复(活化)会触发监听器;
注意:javabean要实现serializable接口,该接口标记对象能以文件的形式存入到硬盘中。是javabean自己感知,故是javabean类实现这两个接口;
一。注册监听器的两步:
1.实现某个监听器接口;
2.在web.xml中注册:如:
<listener>
<listener-class>com.oterman.listener.MyServletContextListener</listener-class>
</listener>
二。三大作用域的监听器:
三大作用域:request,pageContext,Session(page无监听器接口);
监听三大作用域的监听器接口:1.ServletContextListener:用来监听ServletContext对象的创建和销毁;可以在对应的方法中加入要实现的代码;
servlecontext的生命周期:tomcat服务器加载web应用的时候,创建该对象,web应用退出的时候,结束该对象;
2.ServletRequestListener:监听request对象的创建和销毁;
request对象的生命周期:每次请求都会创建request对象,请求完毕后销毁对象;
3.HttpSessionListener
Session的生命周期:调用request.getSession(),创建Session对象;
调用session对象上的invalidate()方法销毁对象;
设置超时时间,销毁对象,如:
<session-config>
<session-timeout>1</session-timeout>//一分钟后session挂掉;
</session-config>
三。用来监听三大作用域域属性变化的监听器
域属性变化包括:添加属性,替换属性,移除属性;
ServletContextAttributeListener(比上多一个attribute关键字);
监听器就是一个普通的类,实现了一些特殊的接口,创建时是 new class 不是 new servlet;
1.HttpSessionBindingListener
javabean被加入和移除时,会触发该监听器;
2.HttpSessionActivationListener
javabean随 Session 对象持久化到一个存储设备中(钝化)和随 Session 对象从一个存储设备中恢复(活化)会触发监听器;
注意:javabean要实现serializable接口,该接口标记对象能以文件的形式存入到硬盘中。是javabean自己感知,故是javabean类实现这两个接口;
示例代码:
package com.oterman.domain;
import java.io.Serializable;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionEvent;
public class Person implements Serializable, HttpSessionBindingListener,
HttpSessionActivationListener {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println("Person Bean 感知到自己被加入了session域中。。。");
}
public void valueUnbound(HttpSessionBindingEvent arg0) {
System.out.println("Person Bean 感知到自己被移除了session域。。");
}
public void sessionDidActivate(HttpSessionEvent arg0) {
System.out.println("Person Bean 感知到自己随着session被活化。。。");
}
public void sessionWillPassivate(HttpSessionEvent arg0) {
System.out.println("Person Bean 感知到自己随着session被钝化到了文件中。。。");
}
}