session的活化和钝化
1.session活化与钝化的作用:可以session中信息保存到本地文件(钝化),再次引用的时候用户可以不必再次输入,直接从本地文件中获取(活化)。
常见用途:QQ登录时QQ号只需要输入一次,第二次登录就不需要输入QQ号,还可以选择记住密码,网页登录同理。
钝化:内存 --> 硬盘
活化: 硬盘--> 内存
2.具体实现步骤:
一,自定义一个监听器,实现HttpSessionActivationListener接口和Serializable接口:
并在该类中实现JavaBean,并重写sessionWillPassivate()和sessionDidActivate()
1 import java.io.Serializable;
2
3 import javax.servlet.http.HttpSessionActivationListener;
4 import javax.servlet.http.HttpSessionEvent;
5 //监听BeanListerner2对象的钝化和活化
6 public class BeanListener2 implements HttpSessionActivationListener,Serializable{
7 private int num;
8 private String user;
9
10 public BeanListener2(int num, String user) {
11 super();
12 this.num = num;
13 this.user = user;
14 }
15 public BeanListener2() {
16 super();
17 }
18 public int getNum() {
19 return num;
20 }
21 public void setNum(int num) {
22 this.num = num;
23 }
24 public String getUser() {
25 return user;
26 }
27 public void setUser(String user) {
28 this.user = user;
29 }
30 //钝化
31 //监听时刻:即将钝化之前
32 public void sessionWillPassivate(HttpSessionEvent se) {
33 System.out.println("钝化之前:BeanListerner2对象将会随着session钝化而钝化");
34 }
35 //活化
36 //监听时刻:刚刚活化之后
37 public void sessionDidActivate(HttpSessionEvent se) {
38 System.out.println("活化之后:BeanListerner2对象将会随着session活化而活化");
39 }
40 }
钝化:
通过配置 tomcat安装目录/conf/context.xml 文件实现

MaxIdleSwap:最大有效非活动时间 ,超过改时间就会钝化,但实际需要的时间会大于设置的时间(服务器运行需要一定的时间、系统延迟等),单位为秒。
PersistentManager:一个管理器,不负责钝化的具体实现,具体的实现类为FileStore类,由FileStore类具体完成session的钝化。
directory:相对路径 该路径相对于 tomcat安装路径/work/Catalina/localhost/项目名(自己具体的那个项目)
(也可以写绝对路径)
活化:自动完成。(从session中获取对象,如果该对象在内存中不存在,则直接尝试从之前钝化保存的本地文件中获取)
前台测试代码:
钝化(实质是将session二进制化 写 到硬盘中)
write.jsp
<%@page import="org.student.listener.BeanListener2"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
BeanListener2 bean = new BeanListener2(10,"zs");
session.setAttribute("bean",bean);
%>
</body>
</html>
read.jsp
活化(将硬盘中的session 逆二进制化 读 到内存中)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
从本地session中读取信息:<br/>
user:${sessionScope.bean.user }<br/>
id:${sessionScope.bean.num }
</body>
</html>
效果:1.运行write.jsp,等待最少五秒钟。
控制台结果:

2.重启tomcat服务器,不运行write.jsp,直接运行read.jsp,任然可以得到如下结果。

保存session的文件路径:

最终结果:

运行环境:tomcat 9.0 、eclipse、Chrome
浙公网安备 33010602011771号