JavaEEJS 一些常用物件的生命週期生存時間總結

Servlet

例項化

當用戶透過瀏覽器輸入一個路徑,這個路徑對應的servlet被呼叫的時候,該Servlet就會被例項化。

初始化

使用者定義Servlet 繼承了HttpServlet,同時也繼承了init(ServletConfig) 方法。init 方法是一個例項方法,所以會在構造方法執行後執行。

提供服務

接下來就是執行service()方法,然後透過瀏覽器傳遞過來的資訊進行判斷,是呼叫doGet()還是doPost()方法。

銷燬

在如下幾種情況下,會呼叫 destroy()

1。 該 Servlet 所在的 web 應用重新啟動,並且在 server。xml 中配置了

如果把 reloadable=“false” 改為reloadable=“true” 就表示有任何類發生的更新,web應用會自動重啟當web應用自動重啟的時候,destroy()方法就會被呼叫。

2。 關閉tomcat的時候 destroy()方法會被呼叫,但是這個一般都發生的很快,不易被發現。

被回收

當該Servlet被銷燬後,就滿足垃圾回收的條件了。 當下一次垃圾回收GC來臨的時候,就有可能被回收。

HttpSession

建立

在第一次呼叫 request。getSession() 方法時,伺服器會檢查是否已經有對應的session,如果沒有就在記憶體中建立一個session並返回。

JavaEE/JS 一些常用物件的生命週期/生存時間總結

javaee7 Api

銷燬

當一段時間內session沒有被使用(預設為30分鐘),則伺服器會銷燬該session。

如果伺服器非正常關閉(強行關閉),沒有到期的session也會跟著銷燬。

如果呼叫session提供的invalidate(),可以立即銷燬session。

JavaEE/JS 一些常用物件的生命週期/生存時間總結

javaee7 invalidate()

注意:伺服器正常關閉,再啟動,Session物件會進行鈍化和活化操作。同時如果伺服器鈍化的時間在session 預設銷燬時間之內,則活化後session還是存在的。否則Session不存在。 如果JavaBean 資料在session鈍化時,沒有實現Serializable 則當Session活化時,會消失。

Cookie

透過setMaxAge(int expiry)來設定cookie的生存時間,單位秒,負數-表示瀏覽器退出時銷燬;0-表示刪除cookie。

文件如下:

expiry -

an integer specifying the maximum age of the cookie in seconds; if negative, means the cookie is not stored; if zero, deletes the cookie。

JavaEE/JS 一些常用物件的生命週期/生存時間總結

javaee7

JavaScript 儲存物件

localStorage 用於長久儲存整個網站的資料,儲存的資料沒有過期時間,直到手動去除。

sessionStorage 用於臨時儲存同一視窗(或標籤頁)的資料,在關閉視窗或標籤頁之後將會刪除這些資料。

參考

https://www。cnblogs。com/skjsg/p/4707032。html

https://how2j。cn/stage/13。html

https://docs。oracle。com/javaee/7/api/toc。htm

https://www。runoob。com/jsref/prop-win-sessionstorage。html