Bootstrap
全类名:org.apache.catalina.startup.Bootstrap
执行Bootstrap的main方法进行启动,核心会执行三个方法:
Bootstrap bootstrap = new Bootstrap();
bootstrap.init();
bootstrap.load(args);
bootstrap.start();
bootstrap.init()
该方法会调用initClassLoaders方法,创建3个类加载器
private void initClassLoaders() {
try {
commonLoader = createClassLoader("common", null);
if (commonLoader == null) {
// no config file, default to this loader - we might be in a 'single' env.
commonLoader = this.getClass().getClassLoader();
}
catalinaLoader = createClassLoader("server", commonLoader);
sharedLoader = createClassLoader("shared", commonLoader);
} catch (Throwable t) {
handleThrowable(t);
log.error("Class loader creation threw exception", t);
System.exit(1);
}
}
commonLoader:加载tomcat下的lib目录的jar;
catalinaLoader:用于加载Catalina,Server以及其他组件,父加载器为commonloader;
sharedLoader:是WebappLoader web应用类加载的父类,父加载器为commonloader。
bootstrap.load(args)
调的是catalina.load(args);
catalina对应的类org.apache.catalina.startup.Catalina,然后开始执行catalina的load。
bootstrap.start()
同样调的也是catalina.start(args)。
public void start() throws Exception {
if (catalinaDaemon == null) {
init();
}
// catalinaDaemon 是在init方法创建,org.apache.catalina.startup.Catalina
Method method = catalinaDaemon.getClass().getMethod("start", (Class [])null);
method.invoke(catalinaDaemon, (Object [])null);
}
执行完start方法,tomcat启动完成