Tomcat原始碼分析之 元件啟動實現分析

2022-02-10 11:44:13 字數 2742 閱讀 3282

tomcat由多個元件組成,那麼tomcat是怎麼對他們的生命週期進行管理的麼,這裡將從tomcat原始碼去分析其生命週期的實現;

bootstrape類為tomcat的入口,所有的元件夠通過實現lifecycle介面來管理生命週期,tomcat啟動的時候只需呼叫server容器的start(),然後父容器依序啟動他所包含的子容器,關閉也是如此。

tomcat的元件啟動順序為: 

standardserver.start()——》standardserver.startinternal() ——》standardservice().start()——standardservice.startinternal() ——>》standardengine().start() ——》standardengine.startinternal()—》standardengine中啟動其他元件,元件關閉也是如此;

現在我們通過demo簡單模擬tomcat的啟動

模擬demo uml類圖

模擬demo時序圖

主要**段如下:

catalina類:

package co.solinx.pattern.observer;

/** * created by lx on 2014/11/26.

*/public class catalina catch (lifecycleexception e) }}

standardserver類

package co.solinx.pattern.observer;

/** * created by lx on 2014/11/26.

*/public class standardserver extends lifecyclebase implements context

system.out.println("standardserver start");

}public void addservice(service service)

}

standardservice類:

package co.solinx.pattern.observer;

/** * created by lx on 2014/11/26.

*/public class standardservice extends lifecyclebase implements service, context

public void setcontainer(containerbase container)

}

standardengine類:

package co.solinx.pattern.observer;

/** * created by lx on 2014/11/26.

*/public class standardengine extends containerbase

protected void addchild(string key, container container)

}

lifecyclesupport類:

package co.solinx.pattern.observer;

/** * created by lx on 2014/11/26.

* **了具體監聽者

*/public class lifecyclesupport

private lifecycle lifecycle = null;

private lifecyclelistener listeners = new lifecyclelistener[0];

private final object listenerslock = new object(); // lock object for changes to listeners

public void addlifecyclelistener(lifecyclelistener listener)

}public lifecyclelistener findlifecyclelisteners()

public void firelifecycleevent(string type, object data)

public void removelifecyclelistener(lifecyclelistener listener)

}if (n < 0)

return;

lifecyclelistener results =

new lifecyclelistener[listeners.length - 1];

int j = 0;

for (int i = 0; i < listeners.length; i++)

listeners = results;}}

}

模擬程式執行結果:

解讀tomcat原始碼之tomcat的啟動過程

tomcat 我們經常用到,但是有時候我們卻感到對他無比陌生,出了錯都不知道是什麼原因引起的。這個就比較尷尬,不過好在tomcat是開源免費的,我們可以看到其原始碼,那麼問題就簡單了,我們看看原始碼什麼迷惑就沒有了。最近對於tomcat有諸多不解,故看看原始碼來解惑,理解可能有些偏差,還請大神不吝賜...

Tomcat原始碼分析

本文將會介紹tomcat的原始碼,並給出一些分析。org.apache.catalina.startup.bootstrap 該類是tomcat啟動的入口類,包含有main方法。它的主要工作包括 引數解析 環境變數讀取 設定 類載入器初始化 通過反射的方式來呼叫catalina。org.apache...

Tomcat 原始碼分析

tomcat 原始碼分析 bootstrap 引導過程 1 初始化自定義的類載入器 common shared catalina 2 建立並例項化第乙個元件類 catalina tomcat 元件體系 server service connector engine host context 實現li...