開發者學堂課程【Servlet 入門:監聽器之 HttpSessionActivation】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/38/detail/889監聽器之 HttpSessionActivation
内容介紹
一、HttpSessionActivation
注意:因為鈍化和活化 session,其實就是使用序列化和反序列化技術把 session 從記憶體儲存到硬碟,和把 session 從硬碟加載到記憶體。
這說明如果 Person 類沒有實作serializable,接口,那麼當 session 鈍化時就不會鈍化 Person,而是把 Person 從 session 中移除再鈍化!這也說明 ession 活化後, session 中就不在有 Person 對象了。
示例步驟:
先不管H ttpSessionA.ctivationListener 監聽器接口,先來配置 Tomcat鈍化 session 的參數,把
下面配置檔案放到tomcat\conf\catalina\localhost目錄下!檔案名稱為項目名稱。
"
org.apache.catalina.session.PresistentManger
"
(maxIdl9swap="1"
"
org.apache.catalina.session.FileStore"(directory="mysession")/>
通路項目的 index.jsp 頁面,這會使 Tomcat 建立 Session 對象,然後等待一分鐘後,檢視 Tomcat\work\Catalina\localhost\istenermysession.目錄下是否會産生檔案,如果産生了,說明鈍化session 的配置成功了,可以開始下一步了。
要實作上述的例子,我們首先建立一個類。
然後輸入以下代碼:
package cn.itcast;
import javax.servlet.http.HttpsessionActivationListener;
import javax.servlet.http.HttpsessionEvent;
public class User implements HttpsessionActivationListener {
public void sessionwillPassivate(HttpsessionEvent se){
system.out.println ( "
啊~我陪
session
去火星了,地球已經不安全了
!
");
}
Public void sessionDidActivate(HttpSessionEvent se){
system.out.println("啊~我和
session
一起重返地球了
! ");
}
}
而 a.jsp 中也将24行更改為 new cn.itcast.User()。而b.jsp不做更改。
之後再重新啟動以下伺服器。打開網頁輸入 a.jsp 儲存資料再輸入 b.jsp 隻能看見一個 usual 類的 toString 方法。
之後我們就會發現小 usual 并沒有陪 session 一起鈍化硬碟上,因為小usual已經死了。因為他已經添加到了 session 裡面,而過了一分鐘會顯示“啊~我陪 session 去火星了,地球已經不安全了!”說明小 usua l已 經死了并不在硬碟上。就好比:session 和小 usual 一起上了去往火星的車而在臨上車前,小usual卻因為沒有票而被趕下來了。而地球毀滅的時候,小 usual 因為沒有上車而毀滅了。
而之後我們如果做一個通路的過程。Session 中的小 usual 并不會再出現。
而所謂的火星就是該檔案家mysession。隻有在此實作了序列化的接口,對象就無法到此。任何能被序列化的接口都必須滿足一個前提就是實作序列化接口,而usual 并沒有滿足序列化接口,是以才“死掉了”。
我們可以根據以下操作來檢視我剛剛的字元串類是否實作序列化接口,我們可以看出 string 類型是有的。而 usual 并不可以。
為了保證這一問題我們在第6行加上 java.io.Serializable。這回 usual 就可以跟着session 一起到硬碟之上。
在網站上輸入 a.jsp 儲存資料,b.jsp 輸出。這時就會顯示出,表示此事 usual 有了序列化借口。而此時接口的作用就是來監聽我們的 usual 是否跟随 session 鈍化和活化,并沒有實際意義,隻不過拿來了解而已。