tomcat中的服务器组件接口是Server接口,服务接口是Service,Server接口表示Catalina的整个servlet引擎,囊括了所有的组件,提供了一种优雅的方式来启动/关闭Catalina部署,而Service接口则封装了容器和连接器,一个Service组件可以有一个容器对象和多个连接器实例,可以自由的把连接器的实例添加到Service组件中,所有的连接器都会与这个容器对象相关联;

UML图:

1、 StandardService类是Service接口的标准实现类,管理着一个Container和多个Connector,成员变量container存储容器变量,成员变量connectors数组中存储着连接器数组,通过addConnector添加连接器,通过removeConnector删除连接器;
2、 StandardService作为Server接口管理的子对象,变量server指向宿主Server对象;
3、 StandardService实现了Lifecycle接口,因此也实现了start和stop方法,在start方法里面,将Container和所有的connector都启动,同样的,stop 方法里面将所有的connector和Container都关闭;
4、 StandardService在setContainer里面将所有的连接器的容器都设置为这个Container,同时还关闭原来的Container和启动新的Container,代码如下:

5、 StandardServer类是Server接口的标准实现类,管理着Service的集合,通过一个services的数组存储这些service集合,通过addService, removeService, findService管理service集合;
6、 StandardServer类实现了Lifecycle接口,因此实现了start和stop方法,在start方法里面启动所有的service,在stop方法里面关闭所有的service;
7、 StandardServer类在await方法里面默认开启8005端口,然后在这个端口阻塞并监听,如果收到消息字符串“SHUTDOWN”,则关闭tomcat服务;当然这个8005端口和关闭命令字符串“SHUTDOWN”只是默认的,是可以修改的,打开tomcat目录下的conf/server.xml文件修改下面的地方即可:

8、 Server示例和Service示例的initialize方法用于初始化所有的子对象,但是在初始化时通过initialized变量来防止重复初始化,在initialize时被置为true,而且在stop方法时不会设置为false,这样即使将Server或者Service关闭了,再次调用initialize也不会初始化:

tomcat源码阅读之Server和Service接口解析的更多相关文章

  1. Spring源码阅读 之 配置的读取,解析

    在上文中我们已经知道了Spring如何从我们给定的位置加载到配置文件,并将文件包装成一个Resource对象.这篇文章我们将要探讨的就是,如何从这个Resouce对象中加载到我们的容器?加载到容器后又 ...

  2. Tomcat源码阅读(二)初始化

    近来,我开始阅读tomcat的源码,感觉还挺清晰易懂:为了方便理解,我参考了网上的一些文章,把tomcat的组成归纳一下:整个tomcat的组成如下图所示: Tomcat在接收到用户请求时,将会通过以 ...

  3. Tomcat8源码笔记(四)Server和Service初始化

    上一章 简单说明下Tomcat各个组件: Server:服务器,Tomcat服务器,一个Tomcat只有一个Server组件; Service:业务层,是Server下最大的子容器,一个Server可 ...

  4. tomcat源码阅读之过滤器

    一.Servlet过滤器: 1.介绍: Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用. Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request ...

  5. tomcat源码阅读之SingleThreadModel

    一.接口简介: 实现了SingleThreadModel接口的servlet类只能保证在同一时刻,只有一个线程执行该servlet实例的service方法,在tomcat实现中会创建多个servlet ...

  6. tomcat源码阅读之载入器(Loader)

    一.Java类的载入器: 双亲委派模型: 1.JVM提供了三种类型的类加载器:引导类载入器(bootstrap class loader).扩展类载入器(extension class loader) ...

  7. tomcat源码阅读

    1      工具准备 需要SVN.Maven.JDK.Eclipse.Eclipse M2插件 2      下载源码及发布包 源码在这里:http://svn.apache.org/repos/a ...

  8. tomcat源码阅读之集群

    一. 配置: 在tomcat目录下的conf/Server.xml配置文件中增加如下配置: <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. clas ...

  9. tomcat源码阅读之Catalina和Bootstrap解析

    一.Cataling类分析: 1.Catalina类是启动类,用于启动或者关闭Server对象,它包含一个Digester对象,用于解析tomcat配置文件:conf/server.xml;调用pro ...

随机推荐

  1. bzoj3944: Sum 杜教筛板子题

    板子题(卡常) 也可能是用map太慢了 /************************************************************** Problem: 3944 Us ...

  2. Windows下sklearn源码安装

    简介 在Windows下编译sklearn源码,主要注意二点: 编译环境的搭建 编译顺序 编译环境的搭建 如果环境没有搭建好,最常见的报错,就是"error: Unable to find ...

  3. hdu-1404-博弈+打表

    Digital Deletions Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  4. 火狐浏览器访问网站出现 HTTP Error 400. The request is badly formed.错误,怎么解决

    今天在访问某个网站时,出现一个“HTTP Error 400. The request is badly formed.”错误, 那么应该如何解决呢? 1.问题描述: 用火狐浏览网站出现“”HTTP ...

  5. Windows各种各种消息投递函数

    1.SendMessage:发送消息给指定的窗口过程:直到窗口过程处理了消息才返回. 2.PostMessage:将消息放入消息队列(与指定窗口创建的线程相关)中:无需等待消息处理,立即返回.   不 ...

  6. BZOJ1342 [Baltic2007]Sound静音问题

    越来越水了... 这道题是简单的单调队列,同时维护最大值和最小值即可. 另解:multiset大法求区间最大最小,但是复杂度会上升... /****************************** ...

  7. jsp jstl的使用

    1)下载jstl.jar和standard.jar文件,然后将其拷贝到tomcat的lib目录下. 具体的下载地址:http://mirrors.ccs.neu.edu/Apache/dist/jak ...

  8. java之args[0]

    java程序有一个主方法main方法,是这样的public static void main(String [] args)args[0]就是用命令行javac编译后java运行java程序时,传入的 ...

  9. Python 数据类型--集合(set)

    一.集合(set) 集合也是一种数据类型,一个类似列表的,无序的,不重复的.它主要有两大作用 1.把一个列表变为集合,就自动去重了,不需要写额外的代码 2.关系测试,测试两组数据之间的交际.差集.并集 ...

  10. ehlib 安装

    EhLibProjGroup110.groupproj,依次编译所有的包,再安装所有的dcl设计时包. == EhLib 7.0.133 Full Source 使用安装器EhLibInstaller ...