该方法是用来确保一些与路径相关的环境变量已经设置。具体来讲,是要确保以下三个环境变量的设置:
Globals.CATALINA_HOME_PROP
,将确保用一个值设置,没设置也会用别的值填充Globals.CATALINA_BASE_PROP
,将确保用一个值设置,没设置也会用别的值填充"java.io.tmpdir"
,变量必须被设置,路径存在且是文件夹,否则报错。一堆环境变量的设置
conf/server.xml
,如果没有,则试图打开server-embed.xml
的读入流digester
解析输入流: inputSource.setByteStream(inputStream); digester.push(this); digester.parse(inputSource);
getServer()
返回的server
成员变量,在之前用Digester
解析
已经生成initStreams
getServer().init();
初始化主要就是这句话
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();
}
}
...
}
}
}