session活化与钝化
会话的持久化:
本篇解决一个问题,就是当正在浏览页面的时候服务器突然关闭,浏览器不关闭,当再次开启服务器时还能够恢复关闭时的页面
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
- package cn.hncu.domain;
- import java.io.Serializable;
- import javax.servlet.http.HttpSessionActivationListener;
- import javax.servlet.http.HttpSessionEvent;
- public class Person implements Serializable, HttpSessionActivationListener {
- private String name;
- public Person(String name) {
- this.name = name;
- }
- @Override
- public void sessionDidActivate(HttpSessionEvent arg0) {
- System.out.println( this+"从硬盘读取并活化了");
- }
- @Override
- public void sessionWillPassivate(HttpSessionEvent arg0) {
- System.out.println( this+"保存到硬盘");
- }
- @Override
- public String toString() {
- return "Person [name=" + name + "]---"+super.toString();
- }
- }
index.jsp
- <% @page import="java.text.SimpleDateFormat"%>
- <%@ page language= "java" import="java.util.*,cn.hncu.domain.Person" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- </head>
- <body>
- <h2>演示session钝化与活化技术</h2>
- <%
- if (session.getAttribute("p")==null){
- Person p= new Person(""+new Random().nextInt(100));
- session.setAttribute( "p", p);
- }
- System.out.println(session.getId()+ "---"+session.getAttribute("p"));
- SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- Date d= new Date(session.getCreationTime());
- System.out.println(sdf.format(d));
- %>
- </body>
- </html>
配置xml文件:aa.xml
- <Context path= "/sessionActivationWeb" docBase="D:/Workspaces/MyEclipseBlue2014/sessionActivationWeb/WebRoot">
- <Manager className= "org.apache.catalina.session.PersistentManager"
- saveOnRestart= "true">
- <Store className= "org.apache.catalina.session.FileStore"
- directory= "d:/a"> </Store>
- </Manager>
- </Context>
然后关于浏览器访问,这里要说一下;就是在浏览器上的http://localhost:8080/的后面要加上的不是项目名,而是上面配置的xml文件的名字,我这里这个文件名是叫aa.xml,因此在访问的时候我输的是http://localhost:8080/aa,因此你可以将这个xml文件的文件名改为你的项目名。
第一次启动时输出信息如下:
此时关闭服务器:
d盘a目录下生成如下文件:
此时在其启动服务器,然后刷新浏览器(若浏览器已经关闭,访问时请带上上次访问的jsessionid):
输出信息如下:
对比一下第一次访问时的信息,发现完全一样的
转载于:https://www.cnblogs.com/eaglesour/p/9474540.html
session活化与钝化相关推荐
- IDEA之Session的活化和钝化
Session活化和钝化的服务器调优,性能优化方案 ,网上已经很多了,这里我就强调一下 应用场景,总之这个很重要. 应用场景: 1.一般来说,服务器启动后,就不会再关闭了,但是如果逼不得已需要重启,而 ...
- Tomcat 之 Session的活化和钝化 源码分析
概要 Session活化:从硬盘上读取序列化的session到内存中 Session钝化:把内存中的session序列化到硬盘上 Tomcat中两种Session钝化管理器 session钝化机制是由 ...
- java从入门到精通二十四(三层架构完成增删改查)
java从入门到精通二十四(三层架构完成增删改查) 前言 环境准备 创建web项目结构 导入依赖和配置文件 创建层次模型 实现查询 实现添加 实现修改 完成删除 做一个用户登录验证 会话技术 cook ...
- idea 配置 tomcat session 无法活化
idea 配置 tomcat session 无法活化 参考网址: https://blog.csdn.net/weixin_44142032/article/details/89004986?ops ...
- 44session绑定解绑、钝化活化
BeanListener监听绑定或者解绑 HttpSessionActivationListener,Serializable 监听钝化活化 Serializable接口拿来实现获取session里面 ...
- Servlet-监听器(ServletContext、Request、Session)
版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/twilight_karl/article/details/73743391 ServletContextL ...
- [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)...
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- jsp内置对象*session
session对象 基本概念: 指的是客户端与服务器的一次会话,从客户端连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止.它是HttpSession类的实例. ...
- Session,监听器
day20 JavaWeb监听器 三大组件: Servlet Listener Filter Listener:监听器 1.初次相见:AWT 2.二次相见:SAX 监听器: 它是一个接口,内容由我们来 ...
最新文章
- 基于Delphi API写的UDP通讯类
- Hash(4) hashtable,hashmap
- typora居中_Windows系统下Typora的安装和语法
- 塑云科技基于 KafKa+OTS+MaxCompute 完成物联网系统技术重构
- 如何通过方法(函数)来实现两个基本数据类型的数值交换
- PeekMessage抓取消息,如何把每个消息都获取到呢?
- Bailian1182 POJ1182 食物链【并查集】
- 表单组件_从0到1封装表单组件(TypeScript + Vue3.0 版)
- TCP协议和UDP协议的对比
- 基于VEH调试寄存器实现无痕HOOK(5)
- 计算机个人市场调查实验报告,市场调查实验报告(一).doc
- vite的public目录
- docker跨主机网络——overlay与macvlan
- glade 使用指南(2)
- postgresql 主备及切换-恢复方案
- .NET破解之PDFdo转换器
- nLite 制作精简版合集光盘常见问题
- freeswitch三、开启视频通话功能
- CSS day_11(6.24) Boot栅格系统和常用组件
- IT项目十大灾难逐个击破
热门文章
- R语言威尔科克森符号秩和(Wilcoxon Signed Rank statistic)分布
- 创造与魔法怎么自建服务器,创造与魔法自建服攻略大全_创造与魔法自建服建造方法、福利_玩游戏网...
- java 迷宫代码_老鼠走迷宫代码 JAVA
- R语言做面板模型的豪斯曼检验
- 报警器——基于arduino
- 低代码局中局:是IT革命还是高级外包? | 甲子光年
- 模具工业及其发展趋势
- 如何提取Excel表格各sheet名称
- MCGS 根据时间实现动态密码进行登陆
- python猜随机数代码_猜随机数游戏Python