简介:
session的序列化的好处就是在服务器更新时会发生短暂的服务器断开连接,如果没有session序列化保存数据,那么以前的数据会在服务器断开时全部消失,而如果有session进行保存,那么就可以在服务器更新完后将数据重新读取回服务器中。
Servlet是与服务器共存亡,那么同样的ServletContext也是与服务器共存亡,服务器关闭则死亡。
但是session有一个起死回生的特性,添加了session信息后,即使关闭了服务器,session的信息也会被保存,而服务器再次重启后,session信息还能背读取。
代码验证:
创建a.jsp b.jsp页面进行添加和查看session信息:
a.jsp:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>title</title>
</head>
<body>
<h1>添加session信息</h1>
<%
session.setAttribute("user", "你好Session!!!");
%>
</body>
</html>
b.jsp:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>title</title>
</head>
<body>
<h1>获取session信息!!!!!!!!!</h1>
<%
out.print(session.getAttribute("user"));
%>
</body>
</html>
启动服务器 -- 先访问a.jsp -- 然后访问b.jsp:
此时关闭服务器 -- 然后查看文件夹(我的路径是:D:\SoftWare\SoftWareFiles\EclipsProject\ServletDemo\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\work\Catalina\localhost\day041502):
发现存在一个SESSIONS.ser文件,这个文件就是在关闭服务器后,被保存在硬盘中的session信息;
当再次启动服务器后:
文件消失了,说明重新被读取回了内存中;
而此时再次访问b.jsp:
惊奇地发现竟然还能读取到session的信息。
这就是session的起死回生特性。
废除session的序列化作用:
如果不想使用session的这一特性,那么就需要配置一个文件:
找到使用的Tomcat文件夹下的conf文件夹(我的路径是:D:\SoftWare\SoftWareFiles\EclipsProject\ServletDemo\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\conf):
打开context.xml文件,然后在其中添加一句(或者取消下面的注释): <Manager pathname=""/>
然后重新启动服务器 -- 访问a.jsp -- b.jsp:
就会发现没有SESSIONS.ser这个文件出现了