日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Session 的钝化与活化

發布時間:2024/9/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Session 的钝化与活化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(一)鈍化

當服務器正常關閉時,還存活著的session(在設置時間內沒有銷毀) 會隨著服務器的關閉被以文件(“SESSIONS.ser”)的形式存儲在tomcat 的work 目錄下,這個過程叫做Session 的鈍化。

(二)活化

當服務器再次正常開啟時,服務器會找到之前的“SESSIONS.ser” 文件,從中恢復之前保存起來的Session 對象,這個過程叫做Session的活化。

(三)注意事項

??????1)想要隨著Session 被鈍化、活化的對象它的類必須實現Serializable 接口,還有要注意的是只有在服務器正常關閉的條件下,還未超時的Session 才會被鈍化成文件。當Session 超時、調用invalidate 方法或者服務器在非正常情況下關閉時,Session 都不會被鈍化,因此也就不存在活化。
??????2)在被鈍化成“SESSIONS.ser” 文件時,不會因為超過Session 過期時間而消失,這個文件會一直存在,等到下一次服務器開啟時消失。
??????3)當多個Session 被鈍化時,這些被鈍化的Session 都被保存在一個文件中,并不會為每個Session 都建立一個文件。

(四)演示

定義兩個Servlet ,在一個Servlet 中將“username” 保存在Session 中,另一個Servlet 中獲取到該“username”,輸出到瀏覽器。

SessionServlet1

import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;@WebServlet("/session1") public class SessionServlet1 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//將username = zhangsan 保存在Session 中request.getSession().setAttribute("username", "zhangsan");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

SessionServlet12

import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;@WebServlet("/session2") public class SessionServlet2 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//獲取到username 輸出到瀏覽器String username = (String) request.getSession().getAttribute("username");response.getWriter().write(username);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

①:首先訪問“session1”,將數據存儲到Session 域中,接著再訪問“session2”,可以獲取到“username”的值,如下圖

②:在Session 時間還未過期的時間內,讓服務器正常關閉,在Tomcat 中的work 目錄下,會多出一個“SESSIONS.ser” 文件,里面存儲著還未過期的Session 信息,這也就說明Session 被鈍化了,以文件的形式保存在本地磁盤中。

③:當服務器再次啟動時,該配置文件會消失,當我們再次訪問“session2”(不再訪問“session1”的前提下),發現仍然可以獲取到“username”的值,這時Session 就從被鈍化的文件中活化。

④:當服務器非正常情況下關閉時(超時、調用invalidate 方法),Session 不會被鈍化,所以在服務器再次啟動時,去訪問“session2”,會因為沒有獲取到Session 報空指針異常(下面的演示是服務器非正常情況下關閉)。

注:由于String 類本身已經實現了序列化接口“java.io.Serializable”,因此會被鈍化成文件。如果我們想要自己定義的“POJO”類也可以鈍化與活化,那么也必須要實現“java.io.Serializable”接口。這也是為什么我們建議將“POJO”類都實現序列化接口的一個原因。

總結

以上是生活随笔為你收集整理的Session 的钝化与活化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。