1. tomcat启动类Bootstrap,启动时会执行这个类里面的main方法
  2. 创建Bootstrap对象,执行init方法
    1. 初始化classloaders,三个加载器加载路径在conf/catalina.properties中定义(默认catalinaLoader与sharedLoader没有设置,两个类加载器默认都是commonLoader,如果设置了,父类是commonLoader),然后sharedLoader是后期加载项目中的class的父类加载器,有共享的class或者jar,可以配在这image.png
    2. 通过反射创建Catalina对象(catalinaLoader.loadClass(“org.apache.catalina.startup.Catalina”))
    3. 设置tomcat容器父加载器 Catalina.setParentClassLoader(sharedLoader)
  3. load: Catalina.load()责任链模式,一层往下一层执行
    1. 加载conf.server.xml
    2. 将xml解析成对象,digester.parse(inputSource)
    3. 一个tomcat对应一个Server,Server下包含多个Service,每个Service包含多个Connector和一个Engine,每个Engine下包含多个Host,每个Host对应一个文件夹下的项目,每个项目被包装成StandardContext,每个项目都有自己的listener,filter,servlet,每个servlet包装成wrapper对象,结构如下图image.png