HttpSessionActivationListener鈍化與活化監聽器
在Servlet的學習中,存在Listener這個技術點,本文主要講述使用HttpSessionActivationListener鈍化與活化Session中的實體。
鈍化 -- 將實體儲存到硬碟中(序列化)
活化 -- 將硬碟中的實體讀取到記憶體中(反序列化)
1、要鈍化與活化Session中的實體,首先要在該實體實現HttpSessionActivationListener和Serializable介面。
package com.liweijian.domain; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionEvent; import java.io.Serializable; /** * @Author:Liweijian * @Description: 鈍化與活化監聽器 * @Date:Create in 15:55 2017/12/14 0014 */ public class Customer implements HttpSessionActivationListener, Serializable{ private String id; private String name; public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public String getId() { return id; } public String getName() { return name; } //鈍化 -- 儲存到硬碟 @Override public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) { System.out.println("session被鈍化了.."); } //活化 -- 讀取到記憶體 @Override public void sessionDidActivate(HttpSessionEvent httpSessionEvent) { System.out.println("session被活化了.."); } }
2、其次,在web/META-INF 目錄下新建context.xml檔案,修改maxIdleSwap屬性的值,該值代表實體多久時間(分鐘)不操作被鈍化。
<?xml version="1.0" encoding="UTF-8"?> <Context> <!-- maxIdleSwap:session中的物件多長時間不使用就鈍化 --> <!-- directory:鈍化後的物件的檔案寫到磁碟的哪個目錄下 配置鈍化的物件檔案在work/catalina/localhost/鈍化檔案 --> <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1"> <!-- 1分鐘--> <Store className="org.apache.catalina.session.FileStore" directory="liweijian" /> </Manager> </Context>
3、建立一個Servlet,將Customer新增到Session中,並等待1分鐘後將提示實體被鈍化
如果容器被關閉,也會鈍化。
package com.liweijian.web; import com.liweijian.domain.Customer; 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; /** * @Author:Liweijian * @Description: SessionActivationListener測試 * @Date:Create in 16:08 2017/12/14 0014 */ @WebServlet(name = "TestSessionActivationServlet") public class TestSessionActivationServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Customer customer = new Customer(); customer.setId("200"); customer.setName("wangwu"); session.setAttribute("customer",customer); } }
4、如果再次訪問該實體,將會自動被活化。
package com.liweijian.web;
import com.liweijian.domain.Customer;
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;
/**
* @Author:Liweijian
* @Description: 活化Customer
* @Date:Create in 16:19 2017/12/14 0014
*/
@WebServlet(name = "TestSessionActivationServlet2")
public class TestSessionActivationServlet2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
Customer customer = (Customer) session.getAttribute("customer");
String name = customer.getName();
System.out.println(name);
}
}
備註:如果不實現Serializable介面,則無法序列化,也就無法鈍化和活化。
鈍化後的檔案在apache-tomcat-8.0.9\work\Catalina\localhost目錄下。
相關推薦
HttpSessionActivationListener鈍化與活化監聽器
在Servlet的學習中,存在Listener這個技術點,本文主要講述使用HttpSessionActivationListener鈍化與活化Session中的實體。 鈍化 -- 將實體儲存到硬碟中
Web---Listener---鈍化與活化
HttpSessionActivationListener 實現此介面的JavaBean,可以感知自己被活化(從硬碟到記憶體)和鈍化(從記憶體到硬碟)的過程。 如果需要同時儲存Session中的Ja
WEB中兩個特殊的監聽器HttpSessionBindingListener和HttpSessionActivationListener (活化與鈍化)
HttpSessionBindingListener 實現此介面類的類,不必在web.xml中進行配置。 實現此介面的類,通常是一個JavaBean,一個JavaBean通過實現此介面,可以感知自己是否新增到了Session中。或是感知自己是否從Session中移除。 示例
JavaWeb-會話的持久化:HttpSessionActivationListener 活化與鈍化
https://blog.csdn.net/qq_26525215/article/details/52262566 要實現會話的持久化,也就是實現HttpSessionActivationListener介面。 實現此介面的JavaBean,可以感知自己被活化(從硬碟到記憶體)和鈍化(從記
HttpSession物件的活化與鈍化
HttpSession物件的活化與鈍化
session的活化與鈍化 (轉)
session的活化與鈍化就是當用戶訪問時網站異常,不能丟掉session,所有也必須採用檔案儲存;和之前那個統計網站訪問量一樣的原理。 class Person implements必須實現這兩個介面,實現session活化和鈍化的要求 活化:從硬碟上讀取到記憶體中
Java核心類庫-IO-對象流(實現序列化與反序列化)
.get throws 反序 code row cts new java cep 使用對象流來完成序列化和反序列化操作: ObjectOutputStream:通過writeObject()方法做序列化操作的 ObjectInputStream:通過readObje
Java IO-5 序列化與反序列化流
str ride log getname file urn turn objects transient 建一個Person類 1 package demo05; 2 3 import java.io.Serializable; 4 5 public cla
JAVA序列化與反射
技術分享 ges img .cn logs 技術 序列化 com -1 JAVA序列化與反射
契約類相關的序列化與反序列化
pub ima cti 相關 ria 數據 num spa set 契約類指繼承了:DataContract的類。契約類常在WCF,webService等各種服務中作為傳輸數據使用。 凡是契約類或者繼承了契約類的類,如果想要屬性參與序列化與反序列化,需要在屬性上加上標記:D
Java序列化與反序列化
setname [] 進制 方式 gets 創建 保存 ati 取數據 Java序列化與反序列化是什麽?為什麽需要序列化與反序列化?如何實現Java序列化與反序列化?本文圍繞這些問題進行了探討。 1.Java序列化與反序列化 Java序列化是指把Java對象轉換為字節序
POJ 2019 Cornfields 二維線段樹的初始化與最值查詢
popu def comm init 都沒有 data- ont emp class 模板到不行。。連更新都沒有。。。存個模板。 理解留到小結的時候再寫。 #include <algorithm> #include <iostream>
Hadoop序列化與Writable接口(一)
temp 們的 ffi err 時間 sea 部分 過程 自身 Hadoop序列化與Writable接口(一) 序列化 序列化(serialization)是指將結構化的對象轉化為字節流,以便在網絡上傳輸或者寫入到硬盤進行永久存儲;相對的反序列化(deserializat
『cs231n』卷積神經網絡的可視化與進一步理解
都是 lan 精度 輸出 上采樣 一行 ear 模型 運算 cs231n的第18課理解起來很吃力,聽後又查了一些資料才算是勉強弄懂,所以這裏貼一篇博文(根據自己理解有所修改)和原論文的翻譯加深加深理解。 可視化理解卷積神經網絡 原文地址 一、相關理論 本篇博文主要講解201
asp.net mvc中如何處理字符串與對象之間的序列化與反序列化(一)
osi strong 類結構 plain pbo edate inf esc arp 前臺我們一般用ajax來發送數據到後端進行處理,如果json數據結構和後臺的實體類結構一致,就直接可以反序列化為指定的對象進行操作,非常方便。 前端發送的json數據結構: 後端實體結
Chapter5_初始化與清理_用構造器初始化
需要 構造 相同 log 編譯 創建對象 rgs div 機制 接下來進入第五章,java中初始化和清理的問題,這是兩個涉及安全的重要命題。初始化的功能主要是為庫中的構件(或者說類中的域)初始化一些值,清理的功能主要是清除程序中不再被需要的元素,防止資源過分被垃圾占用的
Chapter5_初始化與清理_this關鍵字
靜態方法 訪問 過程 scu pan 表示 lte span 編譯 this關鍵字是Java中一類很特殊的關鍵字,首先它只能在方法內使用,用來表示調用這個方法的對象,在這一點上this和其他對對象的引用的操作是相同的。我們之所以可以在方法內部訪問到它是因為編譯器在方法調
C#對象序列化與反序列化
space ros 個人信息 瀏覽器 特性 點名 文件名 屬性節點 派生 1.對象序列化的介紹 (1).NET支持對象序列化的幾種方式 二進制序列化:對象序列化之後是二進制形式的,通過BinaryFormatter類來實現的,這個類位於System.Runtime.Seri
[轉]C++中模板的特化與偏特化
解析 匹配規則 創意 復雜 href 靈活 類模板特化 總結 行存儲 轉載自:http://hi.baidu.com/klcdyx2008/blog/item/5adbf77b79f316f90bd1873c.html 1.引言C++中的模板分為類模板和函數模板,雖然它引進
Chapter5_初始化與清理_數組初始化與可變參數列表
object 包裝 可視化 使用 first ble 對象 log 方式 一、數組初始化 數組是相同類型的,用一個標識符名稱封裝到一起的一個對象序列或基本類型數據序列。編譯器是不允許指定數組的長度的,當使用語句int[] a時,擁有的只是一個符號名,即一個數組的引用,並