原理:为了保证客户端不关闭,服务器关闭后,两次获取的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 {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}@Overrideprotected 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 {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}@Overrideprotected 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对象实现钝化与活化的一个过程

Tomcat中Session钝化与活化实现步骤相关推荐

  1. 【Session】Tomcat中Session持久化到文件系统或数据库

    参考的优秀文章 Tomcat Session 持久化 Package org.apache.catalina.session 最近同事在做Session外置的功能,我对Session持久化.共享也不太 ...

  2. Tomcat中session的管理机制

    https://www.cnblogs.com/coldridgeValley/p/6016211.html 如果sessionId保留在url中是以如下形式:http://xxx.com?a=1&a ...

  3. Tomcat 之 Session的活化和钝化 源码分析

    概要 Session活化:从硬盘上读取序列化的session到内存中 Session钝化:把内存中的session序列化到硬盘上 Tomcat中两种Session钝化管理器 session钝化机制是由 ...

  4. JavaWeb-WEB核心7 会话技术 理解什么是会话跟踪技术掌握Cookie的使用掌握Session的使用(钝化、活化)完善用户登录注册案例的功能

    会话技术 今日目标 理解什么是会话跟踪技术 掌握Cookie的使用 掌握Session的使用 完善用户登录注册案例的功能 1,会话跟踪技术的概述 对于会话跟踪这四个词,我们需要拆开来进行解释,首先要理 ...

  5. Tomcat中的Session小结

    什么是Session 对Tomcat而言,Session是一块在服务器开辟的内存空间,其存储结构为ConcurrentHashMap: Session的目的 Http协议是一种无状态协议,即每次服务端 ...

  6. JavaWeb中Session详解

    1.Session是什么: "会话控制",Session对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会 ...

  7. tomcat的session共享

    转自:https://blog.csdn.net/weixin_33940102/article/details/85973141 可通过下面方法限制一个用户访问一个服务器之后就只在该服务器上操作. ...

  8. Session 的钝化与活化

    (一)钝化 当服务器正常关闭时,还存活着的session(在设置时间内没有销毁) 会随着服务器的关闭被以文件("SESSIONS.ser")的形式存储在tomcat 的work 目 ...

  9. 对于session序列化跟session的钝化与活化的粗浅理解

    1. API对序列化的解释:类通过实现 java.io.Serializable 接口以启用其序列化功能.未实现此接口的类将无法使其任何状态序列化或反序列化.可序列化类的所有子类型本身都是可序列化的. ...

  10. session的钝化和活化

    钝化:内存->硬盘 活化:硬盘->内存 session对象的四种状态: 1.session.setAttribute("a",xxx),将对象a绑定到session中 ...

最新文章

  1. js函数语法:ASCII 码的相互转换,字符串操作,数学计算
  2. php四排序-选择排序
  3. Android ViewGroup等容器控件的使用
  4. BCH热门应用SLP发币系统逐渐走向成熟
  5. python深入与提高_Python深入01 特殊方法与多范式
  6. Leetcode怎么调试java代码,在Clion上调试LeetCode代码
  7. css中如何实现帧布局_?如何在Python中加入多个数据帧?
  8. 乐高创意机器人moc_乐高MOC作品欣赏:变形金刚及其他
  9. 控制台接收信息转发_微信语音信息无法转发?原来这才是正确的转发姿势,看完涨知识了...
  10. 快递小哥逆袭自传:用了6年时间做到了IT部门主管
  11. Bend Labs弯曲传感器介绍
  12. 如何用Python计算股票的Beta系数
  13. 一个女程序员的工作感悟
  14. 立秋是中稻收割的日子
  15. 手机微信html文件怎么打开方式,手机微信页面如何用web浏览器打开
  16. 轻快步伐远不足以跟上轻快心情
  17. 红米note10和红米note8pro哪个好
  18. 二进制数字的表示方法
  19. Mac—开启键盘F1 - F12功能键以及F1 - F12功能键的作用
  20. .Net framework初始化错误

热门文章

  1. python 爬取财经新闻_Python爬虫并自制新闻网站,太好玩了
  2. 2020.7-8月份暑假培训总结
  3. 2.5导入和混合配置 P61 Spring实战 第四版
  4. Metasploit为什么选择Ruby语言(部分)
  5. 华为交换机5855设置ssh
  6. C#山寨版本【天翼拨号客户端】---内含详细抓包,模拟数据---万事俱备,只欠东风。
  7. html5小米手机调用摄像头,html5摄像头 如何调用手机摄像头
  8. android瀑布流插件,jQuery瀑布流插件 Masonry
  9. android4.1.1+nexus S安装BT5
  10. VINS-Mono 代码详细解读——回环检测与重定位、四自由度位姿图优化