一、session的序列化和反序列化
序列化
一般来说,服务器启动后,就不会再关闭了,但是如果逼不得已需要重启,而用户会话还在进行相应的操作,这时就需要使用序列化将session信息保存起来放在硬盘,服务器重启后,又重新加载。这样就保证了用户信息不会丢失,实现永久化保存。
我们举个例子演示一下:
比如我们新建一个项目,放入两个简单的jsp,
a.jsp
<body>
<h1>向session中保存数据</h1>
<%
session.setAttribute("xxx", "我是快乐的小session!");
%>
</body>
b.jsp
<body>
<h1>获取session中的数据</h1>
<%
out.print(session.getAttribute("xxx"));
%>
</body>
我们先打开浏览器访问a.jsp页面,此时已经向session中保存了一个名为xxx的属性,这个时候我们关闭服务器,我们会发现在服务器的目录生成了这样一个文件:
上面的这个就是session的序列化文件,这个时候我们再次重启服务器,就可以发现这个文件自己消失了:
并且,这个时候,我们在浏览器里访问b.jsp,发现也是能得到xxx的值的:
上述这个过程,我们就称之为session的序列化。
这样就实现了服务器的重启,不会影响用户的操作。
反序列化
所谓反序列化,其实就是把session的序列化功能关闭,我们只需要打开tomcat下conf目录下的context.xml文件进行修改就可以了,我们发现文件中有这么一句:
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
就是打开注释就关闭了session的序列化,我们也可以自己加上上面的一句代码:
这样就Ok了。
二、session的活化、钝化
我们再设想一种情况,服务器没有关闭的时候,如果访问的人数很多,会导致服务器中session的数量激增,这样可能会使服务器的内存吃不消,这个时候,我们就可以采取一种策略,我们先把那些闲置的session放到硬盘上,当我们用到它的时候再把它读取到内存中,这样的操作,就是session的活化和钝化。
我们还是在tomcat目录下的conf文件夹中的context.xml进行配置,这样的配置会对所有的项目生效:
<Context>
<!-- 如果session在1分钟内没有使用,那么Tomcat就会钝化它 -->
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<!-- 把session序列化到Tomcat\work\Catalina\localhost\listener\mysession目录下。 -->
<Store className="org.apache.catalina.session.FileStore" directory="mysession"/>
</Manager>
</Context>
我们还是以上面的例子,我们加上上面的配置,然后打开a.jsp页面,等待一分钟,就会在项目目录下生成这样的文件:
这个过程叫做session的钝化。跟我们上面的配置是一致的。
如果我们重新访问b.jsp,就是session的活化过程了,但是上面的这个文件是不会消失的。
以上就是session的钝化和活化。
END.