How Tomcat Works学习笔记<十三>

本文介绍了Tomcat的Server和Service组件,Server是Servlet容器的完整实现,提供启动和停止的优雅机制。StandardServer作为其具体实现,包含了shutdown机制。Service接口代表一个服务,包含连接器和容器,StandardService则允许添加和移除连接器,设置容器。
摘要由CSDN通过智能技术生成
 

Server和Service

         在前面的章节中Catalina已经有了连接器(Connector)和容器(Container),但是还缺少一种好的启动和停止Servlet容器的机制,Server和Service能很好的解决这个问题。

Server

         org.apache.catalina.Server接口表示完整的Servlet容器和相关的其他组件,提供了优雅启动和停止整个系统的机制,有了它以后没有必要再分别去启动连接器和容器。

         当你启动一个Server的时候,它会启动在其内的所有组件,然后等待识别的shutdown命令,一旦通过指定的端口发送了shutdown命令,被server接收到以后它将停止所有的组件,Server定义如下:

         public interface Server {

        public String getInfo();

        public NamingResources getGlobalNamingResources();

        public void setGlobalNamingResources(NamingResources globalNamingResources);

        public int getPort();

        public void setPort(int port);

        public String getShutdown();

        public void setShutdown(String shutdown);

        public void addService(Service service);

        public void await();

        public Service findService(String name);

        public Service[] findServices();

        public void removeService(Service service);

        public void initialize()throws LifecycleException;

}

通过addService方法可以下Server添加Service对象。

StandardServer

    StandardServer是Server接口的标准实现,其中最重要的是他的shutdown机制,同时也包括一些解析Server配置(server.xml)的方法。

    一个Server包括一个或多个Service,提供了addService和removeService方法,作为组件,Server也实现了生命周期的相关功能,提供了initialize、start、stop和await方法。

initialize方法

         initialize方法会初始化Service并添加到Server实例当中:

         public void initialize()throws LifecycleException {

        if (initialized)

            throw new LifecycleException (

                sm.getString("standardServer.initialize.initialized"));

        initialized = true;

        // Initialize our defined Services

        for (int i = 0; i < services.length; i++) {

            services[i].initialize();

        }

}

在StandardServer中增加了initialized变量,防止重复初始化Server。

start方法

         start方法会启动所有的Service,从而启动其它组件,像连接器、容器等:

         public void start() throws LifecycleException {

        // Validate and update our current component state

        if (started)

            throw new LifecycleException

                (sm.getString("standardServer.start.started"));

        // Notify our interested LifecycleListeners

        lifecycle.fireLifecycleEvent(BEFORE_START_EVENT, null);

        lifecycle.fireLifecycleEvent(START_EVENT, null);

        started = true;

        // Start our defined Services

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值