Tomcat源码学习(2)——启动过程分析

时间:2022-03-15 16:48:51

Tomcat启动过程分析

启动 tomcat 时,Windows下执行 startup.bat ;Linux下执行 startup.sh 文件,实际上最后都是调用

org.apache.catalina.startup.Bootstrap类的main方法

main 方法主要做了两件小事:

  1. 定义和初始化 tomcat 自己的 类加载器
  2. 通过反射调用 org.apache.catalina.startup.Catalina的process方法

process 方法主要功能是:

  1. 如果 catalina.homecatalina.base 两个属性,没有设置就设置一下
  2. 参数正确的话,就调用 execute方法

execute 方法主要功能是:

  1. 判断参数是否正确
  2. 参数正确的话,执行 start()方法

start 方法功能:最重要的方法是createStartDigester();((Lifecycle) server).start();createStartDigester方法主要的作用就是帮我们实例化了所有的服务组件包括server,service和connect,start方法就是启动服务实例了。

Digester是一个外部jar包里面的类,主要的功能就是解析xml里面的元素并把元素生成对象,把元素的属性设置成对象的属性,并形成对象间的父子兄弟等关系。调用digester.parse(is)方法后就会根据模式和server.xml文件来生成对象以及他们之间的相互关系。这样我们便有了服务器组件StandardServer的对象,也有了它的子组件StandardService对象等等。

Start执行到server.initialize(); ((Lifecycle) server).start();tomcat就实现了启动服务器组件StandardServer。StandardServer的start方法关键代码是启动它的子组件StandardService,StandardService的start方法跟StandardServer的start方法差不多,是启动它的连接器和容器,一个Service包含一个容器和多个连接器。