分析Server的步骤
关于分析Server自然不能是全文把每一个函数都看一遍,具体的分析思路是根据执行步骤去按照逻辑的顺序来一点一点分析。所以其实分析Server应该从之前讲的catlina的执行流程中开始分析。
在讲解catlina的时候其中说过Server.init()。但是在Server接口中其实是没有定义init(),这个方法其实是在它的父类接口中定义的。而init()的实际操作其实是在他的实现类中StandardServer.initInternal(),至于为什么是initInternal而不是init(),这是相关的代码
LifecycleBase.init()
@Override
public final synchronized void init() throws LifecycleException {
if (!state.equals(LifecycleState.NEW)) {
invalidTransition(Lifecycle.BEFORE_INIT_EVENT);
}
try {
setStateInternal(LifecycleState.INITIALIZING, null, false);
initInternal();
setStateInternal(LifecycleState.INITIALIZED, null, false);
} catch (Throwable t) {
handleSubClassException(t, "lifecycleBase.initFail", toString());
}
}
也就是说调用init(),实质上是在调用initInternal,至于为啥是在LifecycleBase中定义,是由于LifecycleBase是Lifecycle的默认实现类,而Lifecycle其实是tomcat中来定