随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

简介:

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这个文件出现了

posted on 2022-04-15 22:26  时间完全不够用啊  阅读(118)  评论(0编辑  收藏  举报