(一)钝化
当服务器正常关闭时,还存活着的session(在设置时间内没有销毁) 会随着服务器的关闭被以文件(“SESSIONS.ser”)的形式存储在tomcat 的work 目录下,这个过程叫做Session 的钝化。

(二)活化
当服务器再次正常开启时,服务器会找到之前的“SESSIONS.ser” 文件,从中恢复之前保存起来的Session 对象,这个过程叫做Session的活化。

(三)注意事项
1)想要随着Session 被钝化、活化的对象它的类必须实现Serializable 接口,还有要注意的是只有在服务器正常关闭的条件下,还未超时的Session 才会被钝化成文件。当Session 超时、调用invalidate 方法或者服务器在非正常情况下关闭时,Session 都不会被钝化,因此也就不存在活化。
2)在被钝化成“SESSIONS.ser” 文件时,不会因为超过Session 过期时间而消失,这个文件会一直存在,等到下一次服务器开启时消失。
3)当多个Session 被钝化时,这些被钝化的Session 都被保存在一个文件中,并不会为每个Session 都建立一个文件。

这里写图片描述

(四)演示
定义两个Servlet ,在一个Servlet 中将“username” 保存在Session 中,另一个Servlet 中获取到该“username”,输出到浏览器。

SessionServlet1

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/session1")
public class SessionServlet1 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//将username = zhangsan 保存在Session 中request.getSession().setAttribute("username", "zhangsan");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

SessionServlet12

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/session2")
public class SessionServlet2 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取到username 输出到浏览器String username = (String) request.getSession().getAttribute("username");response.getWriter().write(username);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

①:首先访问“session1”,将数据存储到Session 域中,接着再访问“session2”,可以获取到“username”的值,如下图
这里写图片描述

②:在Session 时间还未过期的时间内,让服务器正常关闭,在Tomcat 中的work 目录下,会多出一个“SESSIONS.ser” 文件,里面存储着还未过期的Session 信息,这也就说明Session 被钝化了,以文件的形式保存在本地磁盘中。
这里写图片描述

③:当服务器再次启动时,该配置文件会消失,当我们再次访问“session2”(不再访问“session1”的前提下),发现仍然可以获取到“username”的值,这时Session 就从被钝化的文件中活化。
这里写图片描述
这里写图片描述

④:当服务器非正常情况下关闭时(超时、调用invalidate 方法),Session 不会被钝化,所以在服务器再次启动时,去访问“session2”,会因为没有获取到Session 报空指针异常(下面的演示是服务器非正常情况下关闭)。
这里写图片描述

注:由于String 类本身已经实现了序列化接口“java.io.Serializable”,因此会被钝化成文件。如果我们想要自己定义的“POJO”类也可以钝化与活化,那么也必须要实现“java.io.Serializable”接口。这也是为什么我们建议将“POJO”类都实现序列化接口的一个原因。

06CookieSession-12. HttpSession的钝化和活化相关推荐

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

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

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

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

  3. Session 的钝化与活化

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

  4. session的钝化和活化

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

  5. 2021年8月12日-------Java从基础到项目教程,Java全栈学习路线,帮你省去培训机构的2万块钱。

    余生很贵,请努力活成自己想要的样子. 如何进行学习,别着急,我整理全栈的Java学习路线.帮你吊打面试官. 转载自一位大佬 首先是Java的知识点 一阶段:JavaSE基础 第一步:夯实Java基础语 ...

  6. 自学Java多久才能找到一份15K的工作?干货都说了,能不能就业看你自己了!

    如果有一天我醒来时,发现自己的几年Java开发经验被抹掉,重新回到了一个小白的状态.我想要重新自学Java,然后找到一份自己满意的Java工作,我想大概需要7个月的时间,如果顺利的话,5个月可能就够了 ...

  7. java需要掌握的知识点

    一阶段:JavaSE基础 第一步:夯实Java基础语法 1. Java语言的发展史 2. JDK的下载和安装 3. DOS命令的介绍和使用 4. Path环境变量的配置 5. 第一个代码HelloWo ...

  8. 07【Listener、Ajax、Json】

    文章目录 07[Listener.Ajax.Json] 一.监听器 1.1 监听器的类别 1.1.1 监听域对象 1.1.2 监听属性 1.3.3 监听session对象状态 1.2 监听案例 1.2 ...

  9. Javaweb之核心技术(绘话技术)

    1 会话技术 1.1 会话管理概述 1.1.1 什么是会话 这里的会话,指的是web开发中的一次通话过程,当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束. 举个例子 ...

最新文章

  1. zzuli 2177 Contest - 河南省多校连萌(四)(简单题)
  2. 小程序内嵌h5页面分享_微信小程序webview内页面分享
  3. Git(10)-merge
  4. 作者:江荣(1984-),男,博士,国防科学技术大学助理研究员。
  5. 凭实力搞砸公司重大项目,老板看到直呼内行
  6. 相见恨晚的一款前端布局神器!
  7. mac系统安装win10双系统
  8. 迅为S5P6818核心板ARM Cortex-A53架构三星八核处理器
  9. 【Error】初始化ant design pro项目时遇到“pro 不是内部或外部命令”
  10. 自制MyEclipse豆沙绿主题
  11. 文明重启服务器维护中怎么办,【FAQ】文明重启常见问题大全
  12. MySQL数据库:pg和mysql语法区别
  13. 怎样做中长线股票,中长线炒股技巧有哪些?
  14. java版红石电路修改_我的世界红石数模互换电路【红石小课堂】
  15. jQuery重定向如何跳转到另一个网页
  16. LPDDR4特点和基本概念--基于Hynix H9HCNNNBPUMLHR系列
  17. 对一个信号添加带限高斯白噪声 Matlab实现
  18. 【深度学习】AI一键换天
  19. SQL基础教程--第二章练习题
  20. 用Python自制桌面版翻译软件

热门文章

  1. 【每日早报】2019/08/14
  2. 2021-09-10 参数计算
  3. 【Python】Matplotlib画图(七)——线的颜色、点的形状
  4. 数据库迁移 软件Spoon Kettle环境搭配(本人踩过的坑)
  5. matlab调用CVX工具包
  6. 软件项目管理三国启示录01 群雄争霸之项目经理的自我修养
  7. MySQL基础知识点集合
  8. 计算机一级补考53分能过吗,我考了53分
  9. 【愚公系列】2023年01月 .NET CORE工具案例-基于SqlSugar的多库多表融合查询
  10. 做报表到10点才下班,做的还是丑,怎样才能做出一张好看的报表?