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