listener:session的序列化

Tomcat 会在 session 从时间不被使用时钝化 session 对象,所谓钝化 session ,就是把 session 通过序列化的方式保存到硬盘文件中

当用户再使用 session ,Tomcat 还会把钝化的对象再活化 session,所谓活化就是把硬盘文件中的 session 在反序列化回内存。当 session  Tomcat 钝化时, session 中存储的对象也被纯化,当 session 被活化时,也会把 session 中存储的对象活化。

如果某个类实现了 HttpSessionActiveationListener,接口后,当对象随着 session 被钝化和活化时,下面两个方法就会被调用:

 Ø  public void sessionwillPassivate(Hitt.SessionEvent se):当对象感知被活化时调用本方法;

Ø  public void sessionDidActivate(HittoSessionEvent se):当对象感知被钝化时调用本方法;

HittpSessionA.ctivationListener.监听器与

HittoSessionBindingListener.监听器相似,都是感知型的监听器,例如让 Person 类实现了 HittpSessionActivationListener ,监听器接口,并把 Person 对象添加到了 session 中后,当 Tomcat 钝化 session 时,同时也会钝化 session 中的 Person 对象,这时 Person 对象就会感知到自己被钝化了。

其实就是调用 Person 对象的 sessionwillassivate() 方法。当用户再次使用 sessio 时,Tomcat会 活化 session,这时 person 会感知到自己被活化,其实就是调用 Person 对象的sessionDidActivate()方法。

我们要明白什么是 session 的序列化和反序列化,session 的活化和钝化,之后才是 session 的活化监听

例:

a.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<h1>向session中保存数据</h1>
<body>
<%
session.setAttribute("xxx","iamsession");
%>
</body>
</html>

 b.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>获取session中的数据</h1>
<%
out.print(session.getAttribute("xxx"));
%>

</body>
</html>

启动服务器:

1.访问a.jsp在访问b.jsp  会显示:iamsession

2.直接访问b.jsp  输出为null

3.访问a.jsp在访问b.jsp  会显示:iamsession,之后关闭服务器,再打开,访问b.jsp 可以输出 iamsession!

服务器关闭之后, session 有重生的效果可以将已经关闭重启的服务器中的数据给取出。而要向重生必然数据就存储在了硬盘之中。

首先把服务器关闭,我们会发现项目目录中出现了一个文件名为 SESSIONS.ser 的文件,其中的ser就是序列化的单词首字母。我们所有的 session都保存在其中。

之后我们再启动服务器,稍等一下会发现项目目录中的 SESSIONS.ser 消失了。

说明服务器在启动时,又把它读回到了内存。这就是 session 能够死而复生的秘密。

而它的作用就体现在一个项目上线跑起来之后,我们通常不会关闭,而当项目需要更新时难免会更新服务器。而重启服务器之后我们就要宣布在线用户下线,

比如:淘宝上正有人在购买商品。

此时我们宣布所有人下线就十分不合理。所以我们就要保证在服务器重启时,session 还能够复活。

将以前的数据给再次放回去。而浏览器还能再次访问,这就是 session 的序列化。

之后如果要将 session 的序列化给取消,依旧是打开这个配置文件,再 context.xml 中找到 conf。在其中加一些配置,在23行输入,””/>,就可以起到作用。

阅读剩余
THE END