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 ...
随机推荐
- 『PyTorch』第一弹_静动态图构建if逻辑对比
对比TensorFlow和Pytorch的动静态图构建上的差异 静态图框架设计好了不能够修改,且定义静态图时需要使用新的特殊语法,这也意味着图设定时无法使用if.while.for-loop等结构,而 ...
- python-day32--进程--->socker并发
一.进程背景 1.进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 2.进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有 ...
- thinkphp关于时间加减几天
1.当前时间,往后退5天: date('Y-m-d H:i:s',strtotime('-1 days')); 2.有固定时间,往后面退一天或者七天,或者30天: 比如时间:$time = 2014- ...
- iOS UI-UIPickerView(拾取器)、UIWebView(网页视图)和传值方式
// // ViewController.m // IOS_0107_finalToolClass // // Created by ma c on 16/1/7. // Copyright (c) ...
- iOS UI-手势(Gesture)
#import "ViewController.h" @interface ViewController ()<UIActionSheetDelegate> @prop ...
- js上传图片前预览方法(支持预览多个图片)
运用js实现上传图片前的预览(支持多张图片),实现的例子如下: 1.源码例子: 1)Js脚本页面 <!doctype html> <html> <head> < ...
- jquery组件和插件写法
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- iOS UIlabel怎么加载html字符串 富文本的用法
要加载html字符串,用人说,直接用webView啊!但是,有时候我们只需要显示2行文字,如此少的内容却要在复杂的UI排版中加入一个占用资源较多的webview,得不偿失.这里要说的是,我们其实可以用 ...
- WLAN 802.11 a/b/g PHY Specification and EDVT Measurement III
Transmit Rated Emission (FCC) AC power conducted emission.-FCC 15.207 Minimum 6 dB bandwidth. -500kH ...
- 利用 gulp 来合并seajs 的项目
gulp-seajs-transport 和 gulp-seajs-concat这两个gulp插件 gulp-seajs-transpor 这个插件这样是给每个js模块 标示 模块名称 gulp-se ...