tomcat源码阅读之Server和Service接口解析
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接口解析的更多相关文章
- Spring源码阅读 之 配置的读取,解析
在上文中我们已经知道了Spring如何从我们给定的位置加载到配置文件,并将文件包装成一个Resource对象.这篇文章我们将要探讨的就是,如何从这个Resouce对象中加载到我们的容器?加载到容器后又 ...
- Tomcat源码阅读(二)初始化
近来,我开始阅读tomcat的源码,感觉还挺清晰易懂:为了方便理解,我参考了网上的一些文章,把tomcat的组成归纳一下:整个tomcat的组成如下图所示: Tomcat在接收到用户请求时,将会通过以 ...
- Tomcat8源码笔记(四)Server和Service初始化
上一章 简单说明下Tomcat各个组件: Server:服务器,Tomcat服务器,一个Tomcat只有一个Server组件; Service:业务层,是Server下最大的子容器,一个Server可 ...
- tomcat源码阅读之过滤器
一.Servlet过滤器: 1.介绍: Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用. Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request ...
- tomcat源码阅读之SingleThreadModel
一.接口简介: 实现了SingleThreadModel接口的servlet类只能保证在同一时刻,只有一个线程执行该servlet实例的service方法,在tomcat实现中会创建多个servlet ...
- tomcat源码阅读之载入器(Loader)
一.Java类的载入器: 双亲委派模型: 1.JVM提供了三种类型的类加载器:引导类载入器(bootstrap class loader).扩展类载入器(extension class loader) ...
- tomcat源码阅读
1 工具准备 需要SVN.Maven.JDK.Eclipse.Eclipse M2插件 2 下载源码及发布包 源码在这里:http://svn.apache.org/repos/a ...
- tomcat源码阅读之集群
一. 配置: 在tomcat目录下的conf/Server.xml配置文件中增加如下配置: <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. clas ...
- tomcat源码阅读之Catalina和Bootstrap解析
一.Cataling类分析: 1.Catalina类是启动类,用于启动或者关闭Server对象,它包含一个Digester对象,用于解析tomcat配置文件:conf/server.xml;调用pro ...
随机推荐
- 『cs231n』神经网络组件
- python-day33--互斥锁
锁的意思就是:一个一个的执行 from multiprocessing import Process,Lock import os import time def work(mutex): mutex ...
- bfs,dfs区别
一般来说用DFS解决的问题都可以用BFS来解决. DFS(深搜的同时考虑回溯) bfs=队列,入队列,出队列:dfs=栈,压栈,出栈 bfs是按一层一层来访问的,所以适合有目标求最短路的步数,你想想层 ...
- 双机热备(准)-->RAC(夭折)-->DG(异地容灾)
以下有的地方为oracle专业术语,非懂勿喷.前段时间某项目负责人告知,他们应用需要一套oracle数据库环境运行模式为双机热备.简单了解下对于现在已经非常成熟的RAC再合适不过了.详细问了问当前服务 ...
- spark出现task不能序列化错误的解决方法 org.apache.spark.SparkException: Task not serializable
import org.elasticsearch.cluster.routing.Murmur3HashFunction; import org.elasticsearch.common.math.M ...
- SQL Server如何清除曾经登录过的登录名
我用的是SQL Server2008数据库,在数据库登录界面,有时我们用户已经在安全性已经删除了,但是登录名痕迹还是存在, 那如何删除掉这些用户登录过的登录记录呢? 我本机是要删除这个登录名为s的记录
- [转载]java中io流关闭的顺序
原文URL:http://blog.csdn.net/shijinupc/article/details/7191655 还是先看API void close() Closes ...
- 【重大更新】DevExpress v17.2新版亮点—Bootstrap篇(二)
用户界面套包DevExpress v17.2日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了Bootstrap Controls v17.2 的CardView.Charts ...
- 20165202 Mypwd
实现mypwd(选做,加分) 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 提交过程博客的链接 实现过程 使用m ...
- L2-003. 月饼(贪心)
L2-003. 月饼 简单的结构体和排序应用题 #include<iostream> #include<stdio.h> #include<algorithm> u ...