tomcat包含很多元件。這些元件需要跟隨tomcat一起啟動和關閉。如何達到這種目的呢?tomcat引入了生命週期的概念。
生命周相關的介面和類包括
1. org.apache.catalina.lifecycle
2. org.apache.catalina.lifecyclelistener
3. org.apache.catalina.lifecycleevent
4. org.apache.catalina.util.lifecyclesupport
下面分別介紹一下這些類//新增事件***
public
void
addlifecyclelistener
(lifecyclelistener listener)
;//查詢所有的事件***
public lifecyclelistener[
]findlifecyclelisteners()
;//刪除事件***
public
void
removelifecyclelistener
(lifecyclelistener listener)
;//啟動
public
void
start()
throws lifecycleexception;
//停止
public
void
stop()
throws lifecycleexception;
//這個方法的內容是***被通知時需要做的事
public
void
lifecycleevent
(lifecycleevent event)
;
這些事件型別定義在lifecycle介面中。可以把lifecycleevent理解成生命週期體系中的bean物件,乙個用於傳遞資料的資料結構。其屬性如下
//乙個附加物件,沒有實際用途,
//可以理解為備註(tomcat中有些**用這個物件來記錄日誌)
//也可以直接忽略
private object data = null;
//lifecycle物件,觸發事件的物件
private lifecycle lifecycle = null;
//事件型別
private string type = null;
//建構函式,持有乙個lifecycle的引用
public
lifecyclesupport
(lifecycle lifecycle)
//lifecycle的引用
private lifecycle lifecycle = null;
//用於維護當前liftcycle的***列表
private lifecyclelistener listeners=
newlifecyclelistener[0
];//新增/移除***的時候需要加鎖,這是加鎖使用的鎖物件
private
final object listenerslock =
newobject()
;// lock object for changes to listeners
//新增***,向listeners中加入乙個***物件
public
void
addlifecyclelistener
(lifecyclelistener listener)
}//返回監聽當前物件的所有***
public lifecyclelistener[
]findlifecyclelisteners()
//觸發***,傳入要觸發的***的型別
public
void
firelifecycleevent
(string type, object data)
else
if(lifecycle.before_start_event.
equals
(type)
)else
if(lifecycle.start_event.
equals
(type)
)else
if(lifecycle.after_start_event.
equals
(type)
)else
if(lifecycle.before_stop_event.
equals
(type)
)else
if(lifecycle.stop_event.
equals
(type)
)else
if(lifecycle.after_stop_event.
equals
(type)
)else
if(lifecycle.destroy_event.
equals
(type)
) lifecycleevent event =
newlifecycleevent
(lifecycle, type, data)
; lifecyclelistener interested[
]= listeners;
for(
int i =
0; i < interested.length; i++
) interested[i]
.lifecycleevent
(event);}
//移除***,在listeners中移除乙個***物件
public
void
removelifecyclelistener
(lifecyclelistener listener)}if
(n <0)
return
; lifecyclelistener results=
newlifecyclelistener
[listeners.length -1]
;int j =0;
for(
int i =
0; i < listeners.length; i++
) listeners = results;
}}
生命週期體系的使用
上面我們簡單描述了一下生命週期體系中相關的一些類。接下來我們看一下這個體系的簡單使用方法。
mylifecycle中初始化乙個lifecyclesupport類。
在程式中使用lifecyclesupport的 addlifecyclelistener 方法,為mylifecycle註冊***。
當mylifecycle的狀態發生變化的時候,開發者就可以呼叫lifecyclesupport的 firelifecycleevent 方法觸發事件,告知所有註冊的***:「***事件發生了」。
firelifecycleevent 方法會呼叫***(lifecyclelistener)的 lifecycleevent 方法來處理對應的事件。由於lifecyclelistener只是個介面,所以具體的處理邏輯在***的實現類中實現。
再說說之前忽略的 start 和 stop 方法
Docker實戰(3) Tomcat部署
執行環境 centos7,docker version 1.13.1,docker tomcat version 8.5.50 建立檔案 為對映檔案做準備,非固定 放入你的專案到root資料夾下,也可自己建立乙個index.html,我就先建立乙個demo,並輸入一些測試內容。cat index.h...
Tomcat學習 如何檢視Tomcat版本號
進入tomcat bin目錄下,shift 右鍵 在此處開啟命令提示框,開啟命令提示符視窗,輸入命令version.bat,就可以看到如下結果 d apache tomcat 8.5.31 bin version.bat using catalina base d apache tomcat 8.5...
Tomcat初步學習
tomcat知識點 n web inf u classes u web.xml u lib n 從httpservlet繼承,重寫doget dopost方法 n 部署web.xml n 只有乙個物件 n 第一次請求的時候被初始化,只一遍 n 初始化後先呼叫init方法,只一遍 n 每個請求,呼叫一...