HttpSessionActivationListener下的对序列化接口的钝化和活化
sessionWillPassivate钝化是指将Serializable接口经常文件存储到磁盘
sessionDidActivate活化是指将生成的文件读取到session域中进行使用,
说明:原本session可以保护用户7天的免密登录;然后钝化使得服务器重启也能保存用户数据
| package com.msb; |
| |
| import org.apache.jasper.tagplugins.jstl.core.Out; |
| |
| 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.setAttribute("user",user); |
| |
| session.setAttribute("listener",new MySessionActivationListener()); |
| } |
| } |
| |
| package com.msb; |
| |
| 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) { |
| |
| System.out.println(se.getSession().hashCode()+"已经钝化"); |
| |
| } |
| |
| public void sessionDidActivate(HttpSessionEvent se) { |
| |
| 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 { |
| |
| HttpSession session = req.getSession(); |
| |
| Object attribute = session.getAttribute("user"); |
| |
| 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> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!