我读Tomcat源码--tomcat启动过程

Tomcat的启动过程:

由startup.sh开始,然后调用catalina.sh,接着调用Tomcat的Java类Bootstrap类的main方法

1、调用init()。初始化三个类加载器,然后生成Catalina类的实例,把它赋值给catalinaDaemon(守护进程对象),并调用该对象的setParentClassLoader

2、调用load()。调用Catalina对象的load方法(加载server.xml文件,解析成Server对象,并调用Server对象的init()。Server、Service等本身不实现init方法,而是在LifecycleBase中有做实现,不过Server、Service等有实现initInternal方法--做一些初始化操作,会经由init方法调用。Server会调用Service的init,Service调用Engine的init)

3、调用start()。调用Catalina对象的start方法(调用Server的start方法,并注册shutdown的钩子线程,监听关闭Tomcat命令。Server、Service等本身不实现start方法,而是在LifecycleBase中有做实现,不过Server、Service等有实现startInternal方法--做一些启动操作,会经由start方法调用。Server会调用Service的start,Service调用Engine的start,Engine调用Host的start,Host调用Context的start,Context调用Wrapper的start。此外,从Engine到Wrapper,还会额外调用Pipeline的start,Pipeline会一一调用他们的Valve的start方法。)

我读Tomcat源码--tomcat启动过程_第1张图片
LifecycleBase的init

以上方法中,先设置生命周期状态为初始化中,然后调用内部初始化方法,接着设置生命周期状态为初始化完成。

我读Tomcat源码--tomcat启动过程_第2张图片
StandardService的initInternal

以上方法中,调用了Engine的init,然后调用执行器的init,然后调用连接器的init

我读Tomcat源码--tomcat启动过程_第3张图片
LifecycleBase的start

以上方法中,先设置生命周期状态为启动中,然后调用内部启动方法,接着根据状态字段判断,若失败,则调用stop方法,若成功,设置生命周期状态为启动完成。

你可能感兴趣的:(我读Tomcat源码--tomcat启动过程)