Tomcat 7 源码分析 - 启动概览 bootstrap
先大致浏览一下整个启动过程吧。下面是org.apache.catalina.startup.Bootstrap的main函数。
我在eclipse调用的是start的命令,也就是传入main的参数是start
// 初始化, 构建org.apache.catalina.startup.Catalina实例,并赋值给catalinaDaemon
bootstrap.init();
// 把刚刚创建并初始化好的bootstrap赋值给bootstrap daemon object used by main.
daemon = bootstrap;
// 设置catalinaDaemon的await为true
daemon.setAwait(true);
// 将main的参数传递给org.apache.catalina.startup.Catalina实例:catalinaDaemon,调用catalinaDaemon的load方法
daemon.load(args);
// 调用catalinaDaemon的start来启动tomcat
daemon.start();
可见,Bootstrap只是一个接待员,真正管事的是org.apache.catalina.startup.Catalina实例:catalinaDaemon。下面再细看上面的几步:
1. bootstrap.init()
// Set Catalina path
setCatalinaHome();
setCatalinaBase();
// 初始化class loader
initClassLoaders();
// 初始化3个class loader,commonLoader是parent,catalinaLoader和sharedLoader是child
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);/** * Set the shared extensions class loader. * * @param parentClassLoader The shared extensions class loader. */ public void setParentClassLoader(ClassLoader parentClassLoader) { this.parentClassLoader = parentClassLoader; }if (await) { await(); stop();}