版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fan510988896/article/details/73603508
实现类:
qualified name:org.apache.catalina.startup.Catalina
catalina的启动主要是调用了三个方法:
1、setAwait:设置服务启动之后是否进入等待状态,true则等待
2、load:加载配置文件config/server.xml,创建并初始化server
方法二:
1、判断server是否存在,如果不存在则调用load方法初始化server
2、调用server的start方法来启动服务器
3、注册关闭钩子,并根据await属性判断是否进入等待状态
4、进入等待状态会调用await方法和stop方法,await方法会直接调用server的await方法
server的await方法会内部执行一个while循环,当循环退出,就会执行stop方法从而关闭服务器。
qualified name:org.apache.catalina.startup.Catalina
catalina的启动主要是调用了三个方法:
1、setAwait:设置服务启动之后是否进入等待状态,true则等待
2、load:加载配置文件config/server.xml,创建并初始化server
3、start:启动服务器
方法一:
public void setAwait(boolean b) {
this.await = b;
}
主要用来设置await属性,await属性会在start方法中的服务器启动完之后来判断是否进入等待状态
方法二:
public void load() {
long t1 = System.nanoTime();
省略创建server代码,使用Digester来创建
try {
this.getServer().init();
} catch (LifecycleException var24) {
if(Boolean.getBoolean("org.apache.catalina.startup.EXIT_ON_INIT_FAILURE")) {
throw new Error(var24);
}
log.error("Catalina.start", var24);
}
long t2 = System.nanoTime();
if(log.isInfoEnabled()) {
log.info("Initialization processed in " + (t2 - t1) / 1000000L + " ms");
}
}
load方法是根据配置文件config/server.xml创建server对象,并赋值给server属性(通过Digester完成),然后调用init方法。
方法三:
public void start() {
if(this.getServer() == null) {
this.load();
}
if(this.getServer() == null) {
log.fatal("Cannot start server. Server instance is not configured.");
} else {
long t1 = System.nanoTime();
try {
调用server的start方法来启动服务器
this.getServer().start();
} catch (LifecycleException var7) {
log.fatal(sm.getString("catalina.serverStartFail"), var7);
try {
this.getServer().destroy();
} catch (LifecycleException var6) {
log.debug("destroy() failed for failed Server ", var6);
}
return;
}
long t2 = System.nanoTime();
if(log.isInfoEnabled()) {
log.info("Server startup in " + (t2 - t1) / 1000000L + " ms");
}
注册关闭钩子
if(this.useShutdownHook) {
if(this.shutdownHook == null) {
this.shutdownHook = new Catalina.CatalinaShutdownHook();
}
Runtime.getRuntime().addShutdownHook(this.shutdownHook);
LogManager logManager = LogManager.getLogManager();
if(logManager instanceof ClassLoaderLogManager) {
((ClassLoaderLogManager)logManager).setUseShutdownHook(false);
}
}
进入等待状态
if(this.await) {
this.await();
this.stop();
}
}
}
catalina的start方法主要是调用了server的start方法来启动服务器,并根据await属性判断是否让程序进入等待状态。
1、判断server是否存在,如果不存在则调用load方法初始化server
2、调用server的start方法来启动服务器
3、注册关闭钩子,并根据await属性判断是否进入等待状态
4、进入等待状态会调用await方法和stop方法,await方法会直接调用server的await方法
server的await方法会内部执行一个while循环,当循环退出,就会执行stop方法从而关闭服务器。