Tomcat源码

BootStrap

BootStrap是Tomcat的入口类

源码流程图

源码启动过程:

ContainerBase的类关系图

ContainerBase.startInternal()方法

// Start our child containers, if any
Container children[] = findChildren();
List<Future<Void>> results = new ArrayList<>();
for (int i = 0; i < children.length; i++) {
 // 这句代码就是会调用ContainerBase下的一个个子容器的call方法
 results.add(startStopExecutor.submit(new StartChild(children[i])));
}

查看new StartChild要执行的call方法

private static class StartChild implements Callable<Void> {
    private Container child;
    public StartChild(Container child) {
      this.child = child;
   }
    @Override
    public Void call() throws LifecycleException {
      child.start();
      return null;
   }
 }

如下图可以清晰的看出container包含的组件

StandardHost将一个个web项目部署起来

StandardContext.startInternal()解析web.xml和添加wrapper

原文地址:https://www.cnblogs.com/snail-gao/p/12165439.html