1. 程式人生 > >HttpSessionActivationListener鈍化與活化監聽器

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時,擁有的只是一個符號名,即一個數組的引用,並