1. 程式人生 > 其它 >Listener之session的序列化

Listener之session的序列化

簡介:

session的序列化的好處就是在伺服器更新時會發生短暫的伺服器斷開連線,如果沒有session序列化儲存資料,那麼以前的資料會在伺服器斷開時全部消失,而如果有session進行儲存,那麼就可以在伺服器更新完後將資料重新讀取回伺服器中。

Servlet是與伺服器共存亡,那麼同樣的ServletContext也是與伺服器共存亡,伺服器關閉則死亡。

但是session有一個起死回生的特性,添加了session資訊後,即使關閉了伺服器,session的資訊也會被儲存,而伺服器再次重啟後,session資訊還能背讀取。

程式碼驗證:

建立a.jsp  b.jsp頁面進行新增和檢視session資訊:

a.jsp:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content
="text/html; charset=UTF-8"> <title>title</title> </head> <body> <h1>新增session資訊</h1> <% session.setAttribute("user", "你好Session!!!"); %> </body> </html>

b.jsp:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
> <html> <head> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>title</title> </head> <body> <h1>獲取session資訊!!!!!!!!!</h1> <% out.print(session.getAttribute("user")); %> </body> </html>

啟動伺服器 -- 先訪問a.jsp -- 然後訪問b.jsp:

此時關閉伺服器 -- 然後檢視資料夾(我的路徑是:D:\SoftWare\SoftWareFiles\EclipsProject\ServletDemo\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\work\Catalina\localhost\day041502):

發現存在一個SESSIONS.ser檔案,這個檔案就是在關閉伺服器後,被儲存在硬碟中的session資訊;

當再次啟動伺服器後:

檔案消失了,說明重新被讀取回了記憶體中;

而此時再次訪問b.jsp:

 

 

驚奇地發現竟然還能讀取到session的資訊。

這就是session的起死回生特性。