对象感知监听器

HttpSessionBindingListener

监听自己何时被帮到session上,何时解绑了

举一个例子

有一个User类,现在User类对象想知道自己是否被添加到session中或被从session移除。

public class User implements HttpSessionBindingListener {

    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println("被添加到了session中");
    }
    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println("被session移除了");
    }
}

然后写一个添加jsp和删除jsp:

	<%
        User user = new User();
        session.setAttribute("user",user);
    %>
    <%
        session.removeAttribute("user");
    %>

控制台输出如下:
在这里插入图片描述
该监听器实际上是JavaBean对session的一个监听。被观察者(事件源)是session,事件是添加/删除该JavaBean对象,所以合起来就是JavaBean对象session添加或删除该JavaBean进行监听,如果发生,则做出相应的操作。


HttpSessionActivationListener

先提两个概念:session的序列化、session的钝化和活化

session存在于一次会话当中,在浏览器被关闭时,就会被销毁。但有的时候我们想再打开浏览器时,仍然可以访问到上次session中的数据,这就需要用到session的序列化。

而Tomcat服务器,确实也帮我们实现了这一点。当我们关闭服务器时,服务器会把所有的session都通过序列化写入到客户端的硬盘当中(apache-tomcat-9.0.22\work\Catalina\localhost\项目目录),等到下一次访问时,再反序列化到服务器中。


有的时候用户太多,服务器端的session太多了。我们就会把一些不活跃的session,先序列化到硬盘中,而当该session又进行操作时,又进行活化——即反序列化到服务器中。
钝化的时间可以在某个项目的conf目录下的context.xml中添加如下配置(该配置是全局配置):
在这里插入图片描述
这里表示经过1分钟,session就会被钝化。


HttpSessionActivationListener的作用就是何时被钝化了,何时被活化了。
还是写一个User类,并实现该接口:

public class User implements HttpSessionActivationListener, Serializable {

    @Override
    public void sessionWillPassivate(HttpSessionEvent se) {
        System.out.println("被钝化了");
    }
    @Override
    public void sessionDidActivate(HttpSessionEvent se) {
        System.out.println("被活化了");
    }

}

这里可以看到,除了实现HttpSessionActivationListener接口,还实现了序列化接口。这是因为session被钝化时会被序列化到硬盘中,而如果User类不实现序列化,就不能被session带着一起到硬盘。(String是实现了序列化接口的,所以session中存字符串可以直接序列化)。
我们访问一个浏览器,然后等待一分钟,就可以看见控制台输出“被钝化了”,而当再次访问时,就会输出“被活化了”。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值