HttpSessionActivationListener下的对序列化接口的钝化和活化

HttpSessionActivationListener下的对序列化接口的钝化和活化

sessionWillPassivate钝化是指将Serializable接口经常文件存储到磁盘

sessionDidActivate活化是指将生成的文件读取到session域中进行使用,

说明:原本session可以保护用户7天的免密登录;然后钝化使得服务器重启也能保存用户数据

package com.msb;
import org.apache.jasper.tagplugins.jstl.core.Out;
//从地址栏读取数据给到user,然后设置到session域中进行保留
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
@WebServlet(urlPatterns = "/Servlet.do")
public class Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
String username = req.getParameter("username");
String password = req.getParameter("password");
User user = new User(username,password);
//这里一定一定是session
session.setAttribute("user",user);
//这里listener只是为了调用钝化活化hascode,做显示使用
session.setAttribute("listener",new MySessionActivationListener());
}
}
package com.msb;
//实体类user
import java.io.Serializable;
public class User implements Serializable {
private String username;
private String password;
public User() {
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
}
package com.msb;
//钝化读取
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
import java.io.Serializable;
public class MySessionActivationListener implements HttpSessionActivationListener , Serializable {
public void sessionWillPassivate(HttpSessionEvent se) {
//钝化将Serializable存入磁盘
System.out.println(se.getSession().hashCode()+"已经钝化");
}
public void sessionDidActivate(HttpSessionEvent se) {
//活化读取Serializable
System.out.println(se.getSession().hashCode()+"已经活化");
}
}
package com.msb;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(urlPatterns = "/userChicker.do")
public class UserChicker extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取user
HttpSession session = req.getSession();
//对前面放入session的数据进行读取
Object attribute = session.getAttribute("user");
//listener后面钝化活化监听器使用
Object listener = session.getAttribute("listener");
String message ="";
//判断是否第一次登录,此用户
if(null != attribute){
message="您已经登录过";
}else{
message="您还未登录";
}
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().println(message);
}
}
<%--
Created by IntelliJ IDEA.
User: tomel
Date: 2022/5/30
Time: 10:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="Servlet.do" method="post">
账号:<input name="username" type="text"><br/>
密码:<input name="password" type="password"><br/>
<input value="提交" type="submit">
</form>
</body>
</html>

钝化创建(无格式)文件Context.xml:这里将钝化文件创建到d盘

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.FileStore" directory="d:/session"/>
</Manager>
</Context>
posted @   爱豆技术部  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
TOP
点击右上角即可分享
微信分享提示