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();
            }
        }
    }