JavaEE:Servlet Listener用法

说明:

Listener用于监听作用域创建和销毁、属性值的变更、Session值的变更等。

一、监听三个作用域创建和销毁:

1.application作用域:

触发时机:启动服务器时调用contextInitialized,停止服务器时调用contextDestroyed。
实现接口:ServletContextListener

(1)实现ServletContextListener接口,重写创建和销毁方法:

public class ServletContextListenerImpl implements ServletContextListener {
    //启动服务器时触发
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContextListener.super.contextInitialized(sce);
    }
    //停止服务器时触发
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContextListener.super.contextDestroyed(sce);
    }
}

(2)在web.xml中注册listener:

<!-- 注册ServletContextListener -->
<listener>
    <listener-class>com.yyh.hkw.listener.ServletContextListenerImpl</listener-class>
</listener>

2.session作用域:

触发时机:调用getSession时调用sessionCreated,session销毁时调用sessionDestroyed(默认30分钟后、非正常关闭、正常关闭服务器)。
实现接口:HttpSessionListener

(1)实现HttpSessionListener接口,重写创建和销毁方法:

public class HttpSessionListenerImpl implements HttpSessionListener {
    //调用getSession时触发
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        HttpSessionListener.super.sessionCreated(se);
    }
    //session销毁时触发(默认30分钟后、非正常关闭、正常关闭服务器)
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        HttpSessionListener.super.sessionDestroyed(se);
    }
}

(2)在web.xml中注册listener(代码同上)。

3.request作用域:

触发时机:html/jsp/servlet请求来时调用requestInitialized,响应结束时调用requestDestroyed。
实现接口:ServletRequestListener

(1)实现ServletRequestListener接口,重写创建和销毁方法:

public class ServletRequestListenerImpl implements ServletRequestListener {
    //请求来时触发
    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        ServletRequestListener.super.requestInitialized(sre);
    }
    //结束响应后触发
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        ServletRequestListener.super.requestDestroyed(sre);
    }
}

(2)在web.xml中注册listener(代码同上)。

二、监听三个作用域属性值变更(增加、移除、替换):

1.application作用域:

触发时机:属性值变更时调用。
实现接口:ServletContextAttributeListener

(1)实现ServletContextAttributeListener接口,重写增加、移除、替换监听方法:

public class ServletContextAttributeListenerImpl implements ServletContextAttributeListener {
    //增加时触发
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        ServletContextAttributeListener.super.attributeAdded(scae);
    }
    //移除时触发
    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        ServletContextAttributeListener.super.attributeRemoved(scae);
    }
    //替换时触发
    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        ServletContextAttributeListener.super.attributeReplaced(scae);
    }
}

(2)在web.xml中注册listener(代码同上)。

2.session作用域:

触发时机:session中属性值变更时调用。
实现接口:HttpSessionAttributeListener

(1)实现HttpSessionAttributeListener接口,重写增加、移除、替换监听方法:

public class HttpSessionAttributeListenerImpl implements HttpSessionAttributeListener {
    //增加时触发
    @Override
    public void attributeAdded(HttpSessionBindingEvent se) {
        HttpSessionAttributeListener.super.attributeAdded(se);
    }
    //移除时触发
    @Override
    public void attributeRemoved(HttpSessionBindingEvent se) {
        HttpSessionAttributeListener.super.attributeRemoved(se);
    }
    //替换时触发
    @Override
    public void attributeReplaced(HttpSessionBindingEvent se) {
        HttpSessionAttributeListener.super.attributeReplaced(se);
    }
}

(2)在web.xml中注册listener(代码同上)。

3.request作用域:

触发时机:request中属性值变更时调用。
实现接口:ServletRequestAttributeListener

(1)实现ServletRequestAttributeListener接口,重写增加、移除、替换监听方法:

public class ServletRequestAttributeListenerImpl implements ServletRequestAttributeListener {
    //增加时触发
    @Override
    public void attributeAdded(ServletRequestAttributeEvent srae) {
        ServletRequestAttributeListener.super.attributeAdded(srae);
    }
    //移除时触发
    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae) {
        ServletRequestAttributeListener.super.attributeRemoved(srae);
    }
    //替换时触发
    @Override
    public void attributeReplaced(ServletRequestAttributeEvent srae) {
        ServletRequestAttributeListener.super.attributeReplaced(srae);
    }
}

(2)在web.xml中注册listener(代码同上)。

三、监听JavaBean存入、移出Session:

触发时机:当前JavaBean对象被存到session时调用valueBound,当前JavaBean对象被移出session时调用valueUnbound。
实现接口:HttpSessionBindingListener

实现HttpSessionBindingListener接口,重写存入、移出监听方法:

public class User implements HttpSessionBindingListener {
    public String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    // 当前JavaBean对象被存到session时触发
    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        HttpSessionBindingListener.super.valueBound(event);
    }
    // 当前JavaBean对象被移出session时触发
    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        HttpSessionBindingListener.super.valueUnbound(event);
    }
}

四、监听JavaBean序列化(存入磁盘)、反序列化(从磁盘取出):

触发时机:当前JavaBean对象被序列化时调用sessionWillPassivate,当前JavaBean对象被反序列化时调用sessionDidActivate。
实现接口:HttpSessionActivationListener

1.实现HttpSessionActivationListener接口,重写序列化、反序列化监听方法:

public class User implements HttpSessionActivationListener {
    public String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    // 当前JavaBean对象被序列化时触发(存入磁盘)
    @Override
    public void sessionWillPassivate(HttpSessionEvent se) {
        HttpSessionActivationListener.super.sessionWillPassivate(se);
    }
    // 当前JavaBean对象被反序列化时触发(从磁盘取出)
    @Override
    public void sessionDidActivate(HttpSessionEvent se) {
        HttpSessionActivationListener.super.sessionDidActivate(se);
    }
}

2.配置Tomcat自动序列化、反序列化session中的值:

(1)在context.xml中加入配置:

方法1,对所有服务器生效:
...\apache-tomcat-x\conf\context.xml
方法2,对localhost生效:
...\apache-tomcat-x\conf\Catalina\localhost\context.xml
方法3,对本工程生效:
工程/WebContent/META-INF/context.xml

(2)配置内容:

<!-- maxIdleSwap表示不进行序列化时间(分钟为单位),directory指序列化文件存放目录 -->
<Context>
    <Manager className="org.apache.catalina.session.persistentManager" maxIdleSwap="1">
        <Store className="org.apache.catalina.session.FileStore" directory="temp">
    </Manager>
</Context>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值