三类监听器
第一类:初始化创建和销毁监听器
接口
ServletRequestListener
ServletContextListener
HttpSessionListener
分别监听请求域对象、web应用域对象、session域对象创建时和销毁时的动作;
第二类:属性增删改监听器
接口
ServletRequestAttributeListener
ServletContextAttributeListener
HttpSessionAttributeListener
分别监听 请求域内、web应用域内、session会话域内属性的增删改动作;
注意:以上两类监听器需要在web.xml中进行注册
注册形式如下
<listener>
<listener-class>top.demo.list.TestListen</listener-class>
</listener>
==========================
第三类:session关联对象监听器
接口
HttpSessionBindingListener
监听实现该接口的对象被session绑定和取消绑定时的动作(如:class AAA实现该接口 ,session中添加属性 value为AAA的实例对象,那么该接口的有关方法会被调用)
HttpSessionActivationListener
监听实现该接口的对象被session绑定后活化和钝化的动作
(如上述AAA类对象又实现了该接口,被添加入session。
web服务器停止且session尚未过期,那么session需要被序列化到硬盘
【意味着AAA类还需要实现Serializable接口】
,此时该对象被钝化,触发监听器的sessionWillPassivate方法;
服务器启动,session重新被加载入内存,该对象也被加载入内存 称为活化,触发该接口sessionDidActivate方法
)
===================================================================
代码
第一类
package top.demo.list;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class TestListen implements ServletRequestListener,ServletContextListener,HttpSessionListener{
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("requestDestroyed");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("requestInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("sessionDestroyed");
}
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("sessionCreated");
}
}
第二类
package top.demo.list;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class TestAttr implements ServletRequestAttributeListener,ServletContextAttributeListener,HttpSessionAttributeListener{
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
System.out.println("attributeAdded and HttpSessionBindingEvent");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
System.out.println("attributeRemoved and HttpSessionBindingEvent");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
System.out.println("attributeReplaced and HttpSessionBindingEvent");
}
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
System.out.println("attributeAdded and ServletContextAttributeEvent");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
System.out.println("attributeRemoved and ServletContextAttributeEvent");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
System.out.println("attributeReplaced and ServletContextAttributeEvent");
}
@Override
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("attributeAdded and ServletRequestAttributeEvent");
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("attributeRemoved and ServletRequestAttributeEvent");
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("attributeReplaced and ServletRequestAttributeEvent");
}
}
第三类
package top.demo.list;
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 Man implements HttpSessionBindingListener,HttpSessionActivationListener,Serializable{
private static final long serialVersionUID = 1L;
@Override
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("valueBound");
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("valueUnbound");
}
@Override
public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("sessionDidActivate 活化");
}
@Override
public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("sessionWillPassivate 钝化");
}
}