一、序列化与反序列化

  1.什么是序列化

      • 把对象转化位字节序列的过程称为序列化(保存到硬盘,持久化)
      • 把字节序列转化位对象的过程称为反序列化(存放于内存)

  2.序列化的用途

      • 把对象的字节序列永久保存到硬盘上,通常放到一个文件中。
      • 把网络传输的对象通过字节序列化,方便传输

    最常见的是Web服务器中的Session对象,当有10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。

二、HttpSessionActivationListener监听session对象的序列化与反序列化

  1.HttpSessionActivationListener用于监控实现类本身,当实现类对象被添加到session中(session.setAttribute())后,session对象序列化(钝化)前和反序列化(活化)后都会被执行,相应的方法。  
      • sessionWillPassivate(HttpSessionEvent se)  session钝化前执行(session从内存到硬盘)
      • sessionDidActivate(HttpSessionEvent se)  session活化后执行(session从硬盘到内存)
  2.我们通过在META-INF目录下配置context.xml文件,设置失效时间和session序列化的保存路径,配置如下:
 <Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="d:/session"/>
</Manager>
</Context>
      • maxIdlSwap="1"表示失效时间为1分钟
      • directory="d:/session"是session保存路径
  工程目录结构:  
  
  3.然后定义一个类实现HttpSessionActivationListener接口,监听session的序列化,代码如下:
 public class HttpSessionActivation_Listener implements HttpSessionActivationListener,Serializable {

     private static final long serialVersionUID = -8367567842003252055L;
private String name ; public void setName(String name) { this.name = name; } public String getName() {
return name;
} public HttpSessionActivation_Listener(String name) {
this.name = name;
}
  //对象实例化后保存到session中,当session失效要被序列化前执行,(只有保存到session中的对象才会被监听到)
public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println(name + "=>Session被序列化到(钝化)到硬盘中,SessionId是:"+se.getSession().getId()); }
  //当session被反序列化后执行
public void sessionDidActivate(HttpSessionEvent se) {
System.out.println(name + "=>Session被反序列化到(活化)到内存中,SessionId是:"+se.getSession().getId());
}
}

  4.jsp页面实现:

 <%
    session.setAttribute("sessionBean",new HttpSessionActivation_Listener("小Cai先森"));
%>

  将实现了HttpSessionActivationListener接口的对象实例化后并添加到session中,(只有添加到session中的对象才能监控到session的动态)

  
  启动服务器,运行结果:
  a.对服务器请求一次后不在做任何操作,等待一分钟,等session失效。(sessionWillPassivate(HttpSessionEvent se)监听)
  

  b.再次请求,失效了的session被反序列化到内存中,可以继续使用。(sessionDidActivate(HttpSessionEvent se)监听)

  

  序列化文件可以再配置的目录中查看:(这是补充的,所以会和上面的序列id不一样)

  

HttpSessionActivationListener序列化与反序列化的更多相关文章

  1. C# 序列化与反序列化几种格式的转换

    这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...

  2. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

  3. Java 序列化与反序列化

    1.什么是序列化?为什么要序列化? Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程. 我们都知道,在进行浏览器访问的时候,我们看到的文本.图片.音频. ...

  4. C#中怎样实现序列化和反序列化

    我们想要将数据进行持久化的操作的话,也就是将数据写入到文件中,我们在C#中可以通过IO流来操作,同时也可以通过序列化来操作,本人是比较推荐使用序列化操作的 因为我们如果想要将一个对象持久化到文件中 如 ...

  5. Java序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  6. XPatchLib 对象增量数据序列化及反序列化器 For .Net

    在日常的软件开发和使用过程中,我们发现同一套系统的同一配置项在不同的客户环境中是存在各种各样的差异的.在差异较为分散时,如何较好的管理这些差异,使得维护过程能够更加安全和快速,一直在这样那样的困扰着开 ...

  7. c# Json 自定义类作为字典键时,序列化和反序列化的处理方法

    一般情况下,Newtonsoft.Json.dll 对 Dictionary<int,object>.Dictionary<string,object>等序列化与反序列化都是成 ...

  8. java 对象序列化与反序列化

    Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化  Java序列化是指把Java对象转换为 ...

  9. 序列化,反序列化和transient关键字

    一.序列化和反序列化的概念 序列化:指把java对象转换为字节序列的过程. 反序列化:指把字节序列恢复为java对象的过程. 对象的序列化主要有两种用途: 1) 把对象的字节序列保存到硬盘上,通常存放 ...

随机推荐

  1. ps色彩范围抠章

    1.在photoshop打开需要抠公章的图像文件2.使用椭圆形选区工具,ALT+SHIFT+鼠标左键,选择章的范围 2.CTRL+J,复制图层,得到图层1,隐藏背景 3.CTRL+L,调整色阶,拖动两 ...

  2. 浅谈扩展欧几里得算法(exgcd)

    在讲解扩展欧几里得之前我们先回顾下辗转相除法: \(gcd(a,b)=gcd(b,a\%b)\)当a%b==0的时候b即为所求最大公约数 好了切入正题: 简单地来说exgcd函数求解的是\(ax+by ...

  3. linux 管理权限

    linux 管理权限 linux 文件 权限 1.使用 ls -l 命令 执行结果如下(/var/log) : drwxr-x--- 2 root adm 4096 2013-08-07 11:03 ...

  4. 端到端测试工具--testcafe

    写在前面 随着业务的增加,复杂性的增加,我们更需要保证页面不能出错,之前需要每次上线之前需要每次人工测试,如果有好多改动,为保证业务不出错,需要耗费更多的时间来测试,所以我们需要写一些测试来保证业务的 ...

  5. Angular Universal(统一平台)笔记

    angular官网高级文档AngularUniversal部分的翻译总结,这东西在angular4开始正式被官方支持了,目前其实支持的服务器端还没有很多,但好歹包括了node和DotNetCore,算 ...

  6. AES-256加密解密

    /// <summary> /// AES-256加密 /// </summary> /// <param name="toEncrypt">& ...

  7. CDN网络架构

    CDN(content delivery network 内容分发网络) 本质上就是提供缓存,使得用户总是能访问离他最近的服务器,akamai是世界上的第一家做CDN的公司 实例:构建CDN分发网络架 ...

  8. NLP+VS=>Image Caption︱自动生成图像标题技术论文+相关项目

    读聪明人的笔记,是不是也能变聪明呢? Image Caption是一个融合计算机视觉.自然语言处理和机器学习的综合问题,它类似于翻译一副图片为一段描述文字. Image Caption问题可以定义为二 ...

  9. linux shell中获取mongodb最大连接数、内存使用情况等

    前两天接到了一个新的需求,需要在linux shell脚本中监控到mongodb最大连接数.内存使用情况等. 但是我对于linux shel很不了解,只是会一些简单常用的linux的操作而已,只要一顿 ...

  10. R语言︱线性混合模型理论与案例探究(固定效应&随机效应)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 线性混合模型与普通的线性模型不同的地方是除了有 ...