3 TOMCAT學習 TOMCAT的生命週期

2021-09-19 17:54:38 字數 3977 閱讀 3346

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 每個請求,呼叫一...