会话的持久化:

本篇解决一个问题,就是当正在浏览页面的时候服务器突然关闭,浏览器不关闭,当再次开启服务器时还能够恢复关闭时的页面

HttpSessionActivationListener 
实现此接口的JavaBean,可以感知自己被活化(从硬盘到内存)和钝化(从内存到硬盘)的过程。
如果需要同时保存Session中的JavaBean则JavaBean也要实现Serializable序列化接口。
实现此接口的JavaBean与HttpSessionBindingListener一样,不必配置到web.xml中。
要实现此功能,必须要先配置以下信息:

第一步:书写一个JavaBean,并实现HttpSessionActivationListener接口如下:

第二步:JSP页面,判断是否存在Person,如果没有将Person放到Session中:

第三步:配置Tomcat的Server.xml文件或是将配置好的xml发布文件放到CATALIINA_HOME\conf\Catalina\localhost目录下:

配置文件如下:
directory=“d:/a”是指Session文件保存的目录。

第四步:测试

1:多次开启新的浏览器窗口,并记录SESSIONID。
2:使用shutdown.bat关闭tomcat应用。
3:观察指定的目录下是否存在*.session文件。
4:再次重新启动tomcat,并使用http://localhost:8080/project;jsessionid=xxxxx指定sessionid的方式访问服务器(如果浏览器没关闭的话就不用带上jsessionid)。
5:观察是否为关闭tomcat之前的同一个Session。
6:一般情况下,PersistentManager持久化Session与Cookie共同使用。
7:HttpSessionActivationListener只做为监听类,监听自己是否钝化或是活化。

示例代码如下:

Person.java

  1. package cn.hncu.domain;
  2. import java.io.Serializable;
  3. import javax.servlet.http.HttpSessionActivationListener;
  4. import javax.servlet.http.HttpSessionEvent;
  5. public class Person implements Serializable, HttpSessionActivationListener {
  6. private String name;
  7. public Person(String name) {
  8. this.name = name;
  9. }
  10. @Override
  11. public void sessionDidActivate(HttpSessionEvent arg0) {
  12. System.out.println( this+"从硬盘读取并活化了");
  13. }
  14. @Override
  15. public void sessionWillPassivate(HttpSessionEvent arg0) {
  16. System.out.println( this+"保存到硬盘");
  17. }
  18. @Override
  19. public String toString() {
  20. return "Person [name=" + name + "]---"+super.toString();
  21. }
  22. }

index.jsp

  1. <% @page import="java.text.SimpleDateFormat"%>
  2. <%@ page language= "java" import="java.util.*,cn.hncu.domain.Person" pageEncoding="UTF-8"%>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6. </head>
  7. <body>
  8. <h2>演示session钝化与活化技术</h2>
  9. <%
  10. if (session.getAttribute("p")==null){
  11. Person p= new Person(""+new Random().nextInt(100));
  12. session.setAttribute( "p", p);
  13. }
  14. System.out.println(session.getId()+ "---"+session.getAttribute("p"));
  15. SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  16. Date d= new Date(session.getCreationTime());
  17. System.out.println(sdf.format(d));
  18. %>
  19. </body>
  20. </html>

配置xml文件:aa.xml

  1. <Context path= "/sessionActivationWeb" docBase="D:/Workspaces/MyEclipseBlue2014/sessionActivationWeb/WebRoot">
  2. <Manager className= "org.apache.catalina.session.PersistentManager"
  3. saveOnRestart= "true">
  4. <Store className= "org.apache.catalina.session.FileStore"
  5. directory= "d:/a"> </Store>
  6. </Manager>
  7. </Context>

然后关于浏览器访问,这里要说一下;就是在浏览器上的http://localhost:8080/的后面要加上的不是项目名,而是上面配置的xml文件的名字,我这里这个文件名是叫aa.xml,因此在访问的时候我输的是http://localhost:8080/aa,因此你可以将这个xml文件的文件名改为你的项目名。

第一次启动时输出信息如下:

此时关闭服务器:

d盘a目录下生成如下文件:

此时在其启动服务器,然后刷新浏览器(若浏览器已经关闭,访问时请带上上次访问的jsessionid):

输出信息如下:

对比一下第一次访问时的信息,发现完全一样的

转载于:https://www.cnblogs.com/eaglesour/p/9474540.html

session活化与钝化相关推荐

  1. IDEA之Session的活化和钝化

    Session活化和钝化的服务器调优,性能优化方案 ,网上已经很多了,这里我就强调一下 应用场景,总之这个很重要. 应用场景: 1.一般来说,服务器启动后,就不会再关闭了,但是如果逼不得已需要重启,而 ...

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

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

  3. java从入门到精通二十四(三层架构完成增删改查)

    java从入门到精通二十四(三层架构完成增删改查) 前言 环境准备 创建web项目结构 导入依赖和配置文件 创建层次模型 实现查询 实现添加 实现修改 完成删除 做一个用户登录验证 会话技术 cook ...

  4. idea 配置 tomcat session 无法活化

    idea 配置 tomcat session 无法活化 参考网址: https://blog.csdn.net/weixin_44142032/article/details/89004986?ops ...

  5. 44session绑定解绑、钝化活化

    BeanListener监听绑定或者解绑 HttpSessionActivationListener,Serializable 监听钝化活化 Serializable接口拿来实现获取session里面 ...

  6. Servlet-监听器(ServletContext、Request、Session)

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/twilight_karl/article/details/73743391 ServletContextL ...

  7. [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)...

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. jsp内置对象*session

    session对象 基本概念: 指的是客户端与服务器的一次会话,从客户端连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止.它是HttpSession类的实例.     ...

  9. Session,监听器

    day20 JavaWeb监听器 三大组件: Servlet Listener Filter Listener:监听器 1.初次相见:AWT 2.二次相见:SAX 监听器: 它是一个接口,内容由我们来 ...

最新文章

  1. 基于Delphi API写的UDP通讯类
  2. Hash(4) hashtable,hashmap
  3. typora居中_Windows系统下Typora的安装和语法
  4. 塑云科技基于 KafKa+OTS+MaxCompute 完成物联网系统技术重构
  5. 如何通过方法(函数)来实现两个基本数据类型的数值交换
  6. PeekMessage抓取消息,如何把每个消息都获取到呢?
  7. Bailian1182 POJ1182 食物链【并查集】
  8. 表单组件_从0到1封装表单组件(TypeScript + Vue3.0 版)
  9. TCP协议和UDP协议的对比
  10. 基于VEH调试寄存器实现无痕HOOK(5)
  11. 计算机个人市场调查实验报告,市场调查实验报告(一).doc
  12. vite的public目录
  13. docker跨主机网络——overlay与macvlan
  14. glade 使用指南(2)
  15. postgresql 主备及切换-恢复方案
  16. .NET破解之PDFdo转换器
  17. nLite 制作精简版合集光盘常见问题
  18. freeswitch三、开启视频通话功能
  19. CSS day_11(6.24) Boot栅格系统和常用组件
  20. IT项目十大灾难逐个击破

热门文章

  1. R语言威尔科克森符号秩和(Wilcoxon Signed Rank statistic)分布
  2. 创造与魔法怎么自建服务器,创造与魔法自建服攻略大全_创造与魔法自建服建造方法、福利_玩游戏网...
  3. java 迷宫代码_老鼠走迷宫代码 JAVA
  4. R语言做面板模型的豪斯曼检验
  5. 报警器——基于arduino
  6. 低代码局中局:是IT革命还是高级外包? | 甲子光年
  7. 模具工业及其发展趋势
  8. 如何提取Excel表格各sheet名称
  9. MCGS 根据时间实现动态密码进行登陆
  10. python猜随机数代码_猜随机数游戏Python