在了解Tomcat啟動過程之前,最好還是上網查查Tomcat有哪些頂層的接口,也就是Tomcat的設計架構,不然暈著頭就去調試代碼,是看不出什麽來的。
通過網上的了解,知道了Tomcat主要的接口有:
·Server、Service、Container、Connector、Lifecycle、Executor、Engine
、Host、Context、Wrapper、Value以及他們之間的關系。
其他的:
Realm、MBean等等。
緊接著大致的瀏覽了壹下這些頂級接口,以及他們之間的關系,畫了壹張類圖,如下:
public?static?void?main(String args[]) {
02.?
03.if?(daemon ==?null) {
04.?
05.daemon =?new?Bootstrap();
06.?
07.try?{
08.?
09.// 初始化守護進程,其實就是初始化類加載器
10.?
11.daemon.init();
12.?
13.}?catch?(Throwable t) {
14.?
15.t.printStackTrace();
16.?
17.return;
18.?
19.}
20.?
21.}
22.?
23.?
24.?
25.try?{
26.?
27.String command =?"start";
28.?
29.if?(args.length >?0) {
30.?
31.command = args[args.length -?1];
32.?
33.}
34.?
35.?
36.?
37.if?(command.equals("startd")) {
38.?
39.args[args.length -?1] =?"start";
40.?
41.daemon.load(args);
42.?
43.daemon.start();
44.?
45.}?else?if?(command.equals("stopd")) {
46.?
47.args[args.length -?1] =?"stop";
48.?
49.daemon.stop();
50.?
51.}?else?if?(command.equals("start")) {
52.?
53.daemon.setAwait(true);
54.?
55.// 加載相關配置文件,初始化幾個主要的頂層接口實例
56.?
57.daemon.load(args);
58.?
59.// 啟動那些有生命周期的頂層實例,監聽用戶請求
60.?
61.daemon.start();
62.?
63.}?else?if?(command.equals("stop")) {
64.?
65.daemon.stopServer(args);
66.?
67.}?else?{
68.?
69.log.warn("Bootstrap: command \""?+ command +?"\" does not exist.");
70.?
71.}
72.?
73.}?catch?(Throwable t) {
74.?
75.t.printStackTrace();
76.?
77.}
78.?
79.?
80.?
81.}
從這個方法看,Tomcat啟動過程可以簡化為3個步驟:
1)初始化守護進程,其實就是初始化類加載器
2)加載相關配置文件,初始化幾個主要的頂層接口實例,簡單了說,就是服務器初始化。
3)啟動那些有生命周期的頂層實例,監聽用戶請求,簡單了說,就是啟動服務器。