tomcat启动分析(3)catalinaload和start

Digester

Digester教程

load

initDirs

该方法是用来确保一些与路径相关的环境变量已经设置。具体来讲,是要确保以下三个环境变量的设置:

  1. Globals.CATALINA_HOME_PROP,将确保用一个值设置,没设置也会用别的值填充
  2. Globals.CATALINA_BASE_PROP,将确保用一个值设置,没设置也会用别的值填充
  3. "java.io.tmpdir",变量必须被设置,路径存在且是文件夹,否则报错。

initNaming

一堆环境变量的设置

剩余部分

  1. 打开配置文件流:
    中间大部分代码都是试图打开conf/server.xml,如果没有,则试图打开server-embed.xml的读入流
  2. digester解析输入流:
    inputSource.setByteStream(inputStream);
    digester.push(this);
    digester.parse(inputSource);
    
  3. 设置双向引用:
    getServer().setCatalina(this);
    
    其中getServer()返回的server成员变量,在之前用Digester解析
    已经生成
  4. 重置输入流initStreams
  5. 调用getServer().init();初始化

start

主要就是这句话

getServer().start();

启动服务器。
然后输出启动耗时,再添加一个jvm退出时的钩子。钩子的行为如下。可以看出,钩子的行为是为了让jvm能优雅地退出。Catalina.this.stop();内部会调用到Server s = getServer();s.stop();s.destroy();完成服务器的生命周期。

protected class CatalinaShutdownHook extends Thread {
        @Override
        public void run() {
            try {
                if (getServer() != null) {
                    Catalina.this.stop();
                }
            }
            ...
            }
        }
    }

你可能感兴趣的:(tomcat启动分析(3)catalinaload和start)