原理:为了保证客户端不关闭,服务器关闭后,两次获取的session是同一个,tomcat内部自动完成以下工作:
1.session的钝化:在服务器正常关闭之前,将session对象系列化到硬盘上,在tomcat的目录下的work目录中,会生成SESSIONS.ser文件
2.session的活化:在服务器启动后,将session文件转化为内存中的session对象即可。读取work目录中的session对象,并删除
实现方式:
1.首先编写servlet两个类
第一个servlet用于创建session对象并向session对象中保存数据:hello session !
@WebServlet(name = "SessionServlet01", value = "/SessionServlet01")
public class SessionServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建session对象
HttpSession session = request.getSession();
//存储数据
session.setAttribute("msg","hello session !");
}
}
第二个servlet类用于获取session中的 :hello session !
@WebServlet(name = "SessionServlet02", value = "/SessionServlet02")
public class SessionServlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取session对象
HttpSession session = request.getSession();
//获取数据
Object msg = session.getAttribute("msg");
System.out.println(msg);
}
}
2.首先将IDEA所在的项目目录下的target——>wed开头的目录复制到tomcat安装目录——>webapps目录下即可
目标目录:

目的地:

3.接下来到apache-tomcat-8.5.31\bin下运行startup.bat文件启动tomcat服务器

正常启动会出现一个黑窗口,若不能启动请查看:Tomcat启动startup.bat一闪而过问题
4.启动正常之后使用浏览器访问tomcat中部署的web项目,就是刚刚复制的web-1.0-SNAPSHOT目录下的servlet的虚拟路径::8080/web-1.0-SNAPSHOT/SessionServlet01,然后在访问一下SessionServlet02

这时黑窗口就会打印:hello session !

到这里说明我们的环境已经搭建成功了,接下就是了解tomcat是如何实现session的钝化与活化
5.进入apache-tomcat-8.5.31\work\Catalina\localhost\web-1.0-SNAPSHOT这个文件你会发现现在什么都没有

6.此时运行apache-tomcat-8.5.31\bin下的shutdown.bat文件正常关闭tomcat服务器,这是正常关闭

关闭后我们会发现之前这个web-1.0-SNAPSHOT目录下什么都没有,现在自动生成了sessions.ser文件,这就是session对象序列化后的文件保存在服务器本地中了

7.接下点击 startup.bat 重新启动tomcat服务器时,sessions.ser文件被删掉了,此时我们再次访问SessionServlet02会发现,黑窗口中还是可以打印 :hello sessio !说明tomcat在启动时读取了该文件,进行了反序列化,我依然可以获取到数据

这就是tomcat对session对象实现钝化与活化的一个过程

本文详细解释了如何通过Servlet在Tomcat中实现session的钝化与活化过程,包括创建session、数据存储与获取,以及服务器启动时session文件的序列化与反序列化。通过实际操作演示了session文件的生成与删除,展示了session持久化的关键步骤。

3963

被折叠的 条评论
为什么被折叠?



