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

 

posted on 2020-11-24 17:05  52.Hz  阅读(406)  评论(0)    收藏  举报