當多個物件存在的時候,物件的建立,物件的銷毀,物件與物件之間關係的維護將是很大的問題,容器的引入,我們將物件的建立,物件關係的維護交給容器,即所謂的控制反轉。而對於物件生命週期的管理也是由容器進行負責,容器怎麼去實現物件生命週期的管理呢?
容器中可能包含很多子容器以及很多元件,tomcat設計思想是入口啟動父容器,而它的子容器和元件是由父容器去啟動的,當所有的元件和子容器都啟動完畢,tomcat也就啟動完成。各個元件和容器都去實現lifecycle介面,那麼就要實現介面裡的方法,我們看看介面裡有哪些方法。
public inte***ce lifecycle
那麼很顯然最重要的也就是start和stop方法。各個元件和容器提供了這些方法的實現,所以它的父元件可以通過這些方法來啟動和停止他們。
並且我們看到,對於生命週期,還存在對於物件生命週期的事件,比如物件建立之前,物件建立,建立之後……即before_start、start、after_start以及物件停止before_stop、stop、after_stop
在這些建立和停止的過程中,我們可以讓某個過程去觸發某個事件,已達到生命週期的管理與監控。所以,我們如果想要乙個元件去觸發事件,需要做到:
①元件需要繫結乙個***
②元件觸發事件
③***處理事件
lifecycleevent類
org.apache.catalina.lifecycleevent表示乙個生命週期事件,下面為該類的內容:
public final class lifecycleevent
extends eventobject
public lifecycleevent(lifecycle lifecycle, string type, object data)
private lifecycle lifecycle = null;
public object getdata()
public lifecycle getlifecycle()
public string gettype()
}
lifecyclelistener介面
表示生命週期的***
public inte***ce lifecyclelistener
lifecyclesupport類
這裡有兩個重要的方法,即:addlifecyclelistener、firelifecycleevent
addlifecyclelistener:新增乙個事件***
firelifecycleevent:激發乙個生命週期的事件
看看firelifecycleevent方法:
public void firelifecycleevent(string type, object data)
for (int i = 0; i < interested.length; i++)
interested[i].lifecycleevent(event);
}
可以看出當某個元件呼叫firelifecycleevent,這個方法便會呼叫:
interested[i].lifecycleevent(event);這個又是什麼呢?他是註冊在元件上的***的方法,***開始工作,對監聽到的事件進行處理。
lifecyclesupport類儲存所有的生命週期***到乙個陣列中,該陣列為listens,它初始化的時候沒有任何成員。
private lifecyclelistener listeners = newlifecyclelistener[0];
當乙個***通過addlifecyclelistener方法被新增的時候,乙個新的陣列(長度比舊陣列大1)會被建立。然後舊陣列中的元素會被拷貝到新陣列中並把新事件新增到陣列中。當乙個事件被刪除的時候,乙個新的陣列(長度為舊陣列-1)的陣列會被建立並將所有的元素儲存到其中。
firelifecycleevent 方法觸發乙個生命週期事件。首先,它會轉殖整個***陣列,然後它呼叫每個成員的 lifecycleevent 方法,傳遞被觸發的事件。乙個實現了 lifecycle 的元件可以使用 lifecyclesupport 類。例如,該程式的******context 類宣告了如下變數
protected lifecyclesupport lifecycle = newlifecyclesupport(this);
******context 呼叫lifecyclesupport 的 addlifecyclelistener 方法新增乙個
生命週期事件:
public voidaddlifecyclelistener(lifecyclelistener listener) {
lifecycle.addlifecyclelistener(listener);
要刪除乙個生命週期監聽事件,******context 呼叫 lifecyclesupport 類的
removelifecyclelistener 方法。
public voidremovelifecyclelistener(lifecyclelistener listener) {
lifecycle.removelifecyclelistener(listener);
要觸發乙個事件,******context 需要呼叫 lifecyclesupport 的
firelifecycleevent 方法:
lifecycle.firelifecycleevent(start_event,null);
tomcat 的session 生命週期
1.session的建立 建立 request.getsession request.getsession true 第一次呼叫時建立session物件,並在response返回頭中新增 request.getsession,等同於request.getsession true 獲取其jsp或sev...
tomcat架構以及生命週期
當然,這幅圖並沒有勾勒出整體的框架以及他們之間的關係,有另一幅圖表現了這個。最初從bootstrap開始啟動,bootstrap會構造出最重要的3個classloader的層級結構,引導載入catalina這個核心類,並且接受外部的命令。而catalina執行的最重要的任務就是在load方法中用di...
3 TOMCAT學習 TOMCAT的生命週期
tomcat包含很多元件。這些元件需要跟隨tomcat一起啟動和關閉。如何達到這種目的呢?tomcat引入了生命週期的概念。生命周相關的介面和類包括 1.org.apache.catalina.lifecycle 2.org.apache.catalina.lifecyclelistener 3.o...