HttpSessionActivationListener    监听HttpSession对象的活化、钝化

钝化:将HttpSession对象从内存中转移至硬盘,存储为.session文件。

活化:把HttpSession对象从持久化状态转变为运行状态(从硬盘加载到内存,恢复原样)。

@WebListener()
public class MyListener implements HttpSessionActivationListener , Serializable {
public void sessionWillPassivate(HttpSessionEvent se) {
//钝化时调用
//.....
} public void sessionDidActivate(HttpSessionEvent se) {
//活化时调用
//......
}
}
    session.setAttribute("myListener",new MyListener());
session.setAttribute("name","chy");

HttpSessionActivationListener和HttpSessionBindListener一样,需要放到某个session中才能监听,监听的是某个具体的session。


钝化是一种特殊的序列化,活化是一种特殊的反序列化,特殊在作用范围限定为session。

既然钝化是一种特殊的序列化,那就是说session中只有可序列化的对象才会被钝化。java自带的数据类型大多数都已implements  Serializable,是可序列化的。我们自己写的实体类,需要实现Serializable接口或Externalizable接口才会被钝化。

HttpSessionActivationListener对象要放到session中,也是session中的对象,

  • 如果我们写的类在实现HttpSessionActivationListener的同时,还实现了Serializable接口或Externalizable接口,钝化时这个监听器可以监听到钝化事件,调用对应的方法,活化时可以监听到活化事件,调用对应的方法。
  • 如果我们写的类在实现HttpSessionActivationListener的同时,没有实现Serializable接口或Externalizable接口,则钝化时这个监听器可以监听到钝化事件,调用对应的方法,但活化时不能监听到活化事件,对应的方法不起作用。

Session钝化的配置

HttpSessionActivationListener这个监听器需要配合钝化配置使用。有2种方式可以配置钝化:

  • 在tomcat -> conf -> context.xml 的<Context>中配置
  • 在web下新建META-INF目录,接着在META-INF下新建context.xml:
<?xml version="1.0" ?>
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="2">
<Store className="org.apache.catalina.session.FileStore" directory="d:/session"> </Store>
</Manager>
</Context>

也是在<Context>中配置。

maxIdleSwap指定session在空闲多少分钟后(在多少分钟内没有再次使用此session),会被钝化到硬盘的.session文件中。

directory指定.session文件的位置,指定的目录不存在时会自动创建。

在tomcat中配置的是全局的,对tomcat下所有部署的WebApp都有效。

在项目中配置的,只作用于这个项目。

Eclipse会自动创建META-INF目录,但IDEA不会自动创建,需要我们需要手动在web下创建META-INF,META-INF和WEB-INF同一级别。


Session钝化配置,监管的是所有的session对象,哪个session在指定时间内没被使用,就钝化这个session到硬盘,一个session一个.session文件。

当一个session对象钝化到.session文件后,之后再次钝化时,还是钝化到同一个.session文件中(先删除原有内容,再写入)。

HttpSessionActivationListener监听的是某个具体的session,只监听所在session的钝化、活化。

监听器只起到监听作用,并不能实现钝化,监听器只是监听这一行为,并做出相应的处理。

session超时,是会删除该session对象,此session中的数据全部丢失;

session钝化是将此session暂存到硬盘,需要时加载到内存接着用,数据依然在。

某个jsp中,先request.getSession()获取session,然后使用Session中的数据。我一直停留在这个jsp页面,算不算一直在使用这个session?

不算。jsp和php一样,是在服务器端解析的。tomcat解析jsp(此时使用session),然后以html文档的形式返回给浏览器,浏览器显示的是html文档,html是静态资源,和session没有半毛钱关系。


session钝化对高并发项目很有用。

比如双11、双12,大家都先打开购物车,不做其他操作,坐等时间一到就购买。

服务器内存中有大量的Session对象,但很多session在几分钟内都是闲置的。通过session钝化将这些闲置的session暂存到硬盘,减轻服务器负担,等到需要时会自动活化。

JavaWeb Listener之HttpSessionActivationListener ,session钝化、活化的更多相关文章

  1. 【转】JavaWeb之Session的序列化和反序列化 && Session的活化和钝化

    应用场景: 1.一般来说,服务器启动后,就不会再关闭了,但是如果逼不得已需要重启,而用户会话还在进行相应的操作,这时就需要使用序列化将session信息保存起来放在硬盘,服务器重启后,又重新加载.这样 ...

  2. session的活化与钝化 (转)

    session的活化与钝化就是当用户访问时网站异常,不能丢掉session,所有也必须采用文件存储:和之前那个统计网站访问量一样的原理. class Person implements必须实现这两个接 ...

  3. JavaWeb Listener

    1. 监听器概述 1.1. 什么是监听器 做过Swing或者AWT图像界面Java程序开发的话,应该对Listener与Event非常熟悉.Swing或者AWT中通过Listener与Event来处理 ...

  4. Listener 监听Session内的对象

    Listener用于监控Session内的对象,分别是HttpSessionBindingListener与HttpSessionActivationListener.它们的触发时机分别为: Http ...

  5. JavaWeb 补充(Cookie&JSP&Session)

    1. 会话技术     1. Cookie     2. Session 2. JSP:入门学习 会话技术 1. 会话:一次会话中包含多次请求和响应.     * 一次会话:浏览器第一次给服务器资源发 ...

  6. 超全面的JavaWeb笔记day11<JSP&Session&Cookie&HttpSession>

    1.JSP 2.回话跟踪技术 3.Cookie 4.HttpSession JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态 ...

  7. JavaWeb:Cookie处理和Session跟踪

    JavaWeb:Cookie处理和Session跟踪 Cookie处理 什么是Cookie Cookie 是存储在客户端计算机上的文本文件,保留了各种跟踪信息.因为HTTP协议是无状态的,即服务器不知 ...

  8. 【Java EE 学习 21 上】【其它类型的监听器】【使用HttpSessionActivationListener监听session的活化和钝化】

    一.ServletContextListener  Method Summary  void contextDestroyed(ServletContextEvent sce)           R ...

  9. 关于session序列化和session钝化和活化

    在第一次启动服务器后,在session中放入一个对象.在页面可以获得,当重启服务器,但是没有关闭浏览器的情况下刷新页面仍然能够获得这个对象,前提是这个对象必须实现了java.io.Serializab ...

随机推荐

  1. Vs2012帮助文档安装介绍

    Vs2012的帮助文档:Microsoft Help Viewer.exe,vs2010对应的是1.0,vs2012对应的是2.0,版本号以此类推 与早期的chm格式的msdn帮助文档不同在于: 1. ...

  2. leetcode 561. 数组拆分 I

    为了理解这种方法,让我们从不同的角度来看待问题.我们需要形成数组元​​素的配对,使得这种配对中最小的总和最大.因此,我们可以查看选择配对中最小值的操作,比如 (a,b)(a,b) 可能会产生的最大损失 ...

  3. java实体 和 xml相互转换

    参考: https://blog.csdn.net/LookForDream_/article/details/88884316 https://zhuchengzzcc.iteye.com/blog ...

  4. select标签刷新后保持之前选择值

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <selec ...

  5. 洛谷P5437/5442 约定(概率期望,拉格朗日插值,自然数幂)

    题目大意:$n$ 个点的完全图,点 $i$ 和点 $j$ 的边权为 $(i+j)^k$.随机一个生成树,问这个生成树边权和的期望对 $998244353$ 取模的值. 对于P5437:$1\le n\ ...

  6. [学习笔记] 网络最大流的HLPP算法

    #define \(u\)的伴点集合 与\(u\)相隔一条边的且\(u\)能达到的点的集合 \(0x00~ {}~Preface\) \(HLPP(Highest~Label~Preflow~Push ...

  7. Vue插槽详解 | 什么是插槽?

    作者 | Jeskson 来源 | 达达前端小酒馆 什么是插槽?插槽的指令为v-slot,它目前取代了slot和slot-scope,插槽内容,vue实例一套内容分发的api,将slot元素作为承载分 ...

  8. [LeetCode] 53. Maximum Subarray 最大子数组

    Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...

  9. Vertica性能分析

    Vertica的特点简单的说可以总结为:列存储.MPP架构.技术比较新.列存储本身带来了数据高度压缩的便利,MPP架构使得可以用相对廉价的PC级服务器横向扩展到较大规模(PB级),05年才问世使得它在 ...

  10. 常用HTTP状态码总结

    HTTP状态码(HTTP Status Code) 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求 ...