HttpSessionActivationListener下的對序列化介面的鈍化和活化
阿新 • • 發佈:2022-05-30
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>