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;standardserver類/** * created by lx on 2014/11/26.
*/public class catalina catch (lifecycleexception e) }}
package co.solinx.pattern.observer;standardservice類:/** * created by lx on 2014/11/26.
*/public class standardserver extends lifecyclebase implements context
system.out.println("standardserver start");
}public void addservice(service service)
}
package co.solinx.pattern.observer;standardengine類:/** * created by lx on 2014/11/26.
*/public class standardservice extends lifecyclebase implements service, context
public void setcontainer(containerbase container)
}
package co.solinx.pattern.observer;lifecyclesupport類:/** * created by lx on 2014/11/26.
*/public class standardengine extends containerbase
protected void addchild(string key, container container)
}
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...