Server组件 - 969251639/study GitHub Wiki
从上图可以看到Server是最外围的一个组件,也是Tomcat的最大一个组件,在tomcat内部它的基本实现类是StandardServer(tomcat的所有基础组件的实现类都是以Standard开头,比如StandardService等)
public final class StandardServer extends LifecycleMBeanBase implements Server
StandarServer集成了Server,Server接口定义服务基础信息(Server继承了Lifecycle接口,所以它也是一个具有生命周期的组件),下面列出了Server一些比较重要的方法
public interface Server extends Lifecycle {
//端口号相关
public int getPort();
public void setPort(int port);
//地址相关
public String getAddress();
public void setAddress(String address);
//Catalina相关,Catalina是tomcat用来包装Server操作的一个工具类
public Catalina getCatalina();
public void setCatalina(Catalina catalina);
//端口号相关
public void addService(Service service);
public Service findService(String name);
public Service[] findServices();
public void removeService(Service service);
}
在分析Server之前得先分析Tomcat的启动过程
https://github.com/969251639/study/wiki/tomcat%E5%90%AF%E5%8A%A8%E6%B5%85%E6%9E%90
最后会看见Server的初始化和启动方法都是在Catalina类中执行
而初始化方法在生命周期类中会调用,最后会调用子类,也就是StandardServer类的initInternal方法
https://github.com/969251639/study/wiki/tomcat%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F
protected void initInternal() throws LifecycleException {
...
// Initialize our defined Services
for (int i = 0; i < services.length; i++) {
services[i].init();
}
}
而initInternal方法最主要的就是调用它下面的多个service的init方法
start方法也是类似
@Override
protected void startInternal() throws LifecycleException {
//触发Server启动事件
fireLifecycleEvent(CONFIGURE_START_EVENT, null);
setState(LifecycleState.STARTING);
// Start our defined Services
synchronized (servicesLock) {
for (int i = 0; i < services.length; i++) {//逐个启动service的start方法
services[i].start();
}
}
}