Tomcat源码(一):整体架构
由于tomcat的组件较多,处理流程比较复杂 ,这里是 由浅到深来解释tomcat的整体架构
1、首先应该大致了解下tomcat的 /conf/server.xml 配置文件:在tomcat启动的时候就会解析此文件,并初始化里面的组件

黑框Sever :代表Tomcat的整个运行实例 端口8005 (我们默认经常请求的8080端口是运行在tomcat中的子程序)配置着tomcat的运行周期 ,包含一个或 多个Service
红框Service:代表表示具体的服务有哪些(一个或多个)包含 多个Connector 和 一个Engine
黄框:Connector 用于接收socket连接,并将连接封装为erquest、response请求(一个service可以包含多个connector)
篮框:表示整个tomcat container 容器 包含:Engine 、Host 、Context 、Wrapper 四个子容器(层级嵌套的关系)
Engine:servlet引擎 请求到达容器的第一步,用于处理请求 (一个service只对应一个engine处理请求)
Host: 主机和域名有关配置 (一个Engine可以对应多个Host)
Context : 一个web工程 (一个Host可以部署多个context)
Wrapper :对应对具体的servlet (一个context含多个Wrapper)
注意 :Wrapper表示web.xml中的servlet、filter、listener 是在项目中的 ,并不在server.xml配置文件中定义
2、他们之间的关系 可以使用一个简单的图表示 :

箭头:表示依赖关系
通过观察图可以发现 当Server的运行会依赖service对象运行,service的运行又依赖connector和container等容器的运行
并且每个组件(这里说的组件在源码中都表示一个类)都 含有 start()、stop()方法 ,
为什么 ? 在tomcat中任何一个组件都是有生命周期的 不仅有启停方法,还有init()、destory(),并且组件之间都互相依赖
在整个从Server启动 和 关闭 期间都都维护着每个组件的运行周期。 因此为了方便管理每一个组件的生命周期
抽象出一个 LifeCycle接口 ,在LifeCycle定义了 tomcat 组件运行周期和监听设置的规范 ,让每个组件都间接或直接的实现此接口
3、 如下图 :

根据上图 :可以知道 每个组件的生命周期都由LifeCycle 直接或间接的控制的 ,也知道了 tomcat 的整体架构
下一篇将 结合源码 来细说Tomcat的启动过程...
Tomcat源码(一):整体架构的更多相关文章
- MyBatis 源码篇-整体架构
MyBatis 的整体架构分为三层, 分别是基础支持层.核心处理层和接口层,如下图所示. 基础支持层 反射模块 该模块对 Java 原生的反射进行了良好的封装,提供了更加简洁易用的 API ,方便上层 ...
- Tomcat源码解析-整体流程介绍
一.架构 下面谈谈我对Tomcat架构的理解 总体架构: 1.面向组件架构 2.基于JMX 3.事件侦听 1)面向组件架构 tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 【深入浅出jQuery】源码浅析--整体架构(转)
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 精尽 MyBatis 源码分析 - 整体架构
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...
- 【jQuery源码】整体架构
jQuery源码可以精简为以下内容: 方框上面的代码根据Jq注释我们可以知道是对AMD规范的支持. jQuery整体上被包裹在一个匿名函数中,这个匿名函数再作为另一个匿名函数的参数被传入,形参fact ...
- 一步步去阅读koa源码,整体架构分析
阅读好的框架的源码有很多好处,从大神的视角去理解整个框架的设计思想.大到架构设计,小到可取的命名风格,还有设计模式.实现某类功能使用到的数据结构和算法等等. 使用koa 其实某个框架阅读源码的时候,首 ...
- Fresco 源码分析 —— 整体架构
Fresco 是我们项目中图片加载专用框架.虽然我不是负责 Fresco 框架,但是由本人负责组里的图片加载浏览等工作,因此了解 Fresco 的源码有助于我今后的工作,也可以学习 Fresco 的源 ...
- CI框架源码研读(整体架构)
有人说phper的深入要从研读mvc框架开始,我跳了一个常用的CI框架入手,主要是因为 CI框架简单轻巧,可以自己DIY功能!!! 1.首先来看CI的整体架构图: 其中:application是用户级 ...
- jQuery源码解读 --- 整体架构
最近学习比较忙,感觉想要提高还是要读源码,所以准备考试这个考试结束就开始读jquery源码啦,加油~
随机推荐
- ui-router 留存
学习 ui-router - 路由控制 022014年01月 参考原文:https://github.com/angular-ui/ui-router/wiki/URL-Routing 在你的应用中大 ...
- MyBatis初识(通过小实例清晰认识MyBatis)
1.MyBatis框架: MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...
- Tomcat集群---Cluster节点配置
<!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. className 表示tomcat集群时,之间相互传递信息使用那个类来实现信息之间的传递. cha ...
- java 内存溢出
不健壮代码的特征及解决办法 1.尽早释放无用对象的引用.好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露. 对于仍然有指针指向的 ...
- 平衡二叉树之RB树
RB树(红黑树)并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能.由于它的设计,任何不平衡都会在三次旋转之内解决.典型的用途是实现关联数组(如C++中的map和s ...
- 微信小程序文档里看不到的小Tips
前几天折腾了下.然后列出一些实验结果,供大家参考. 0. 使用开发工具模拟的和真机差异还是比较大的.也建议大家还是真机调试比较靠谱. 1. WXML(HTML) 1.1 小程序的WXML没有HTML的 ...
- 15-糗事百科(python+xpath)
爬取糗事百科的段子: 1.用xpath分析首要爬去内容的表达式: 2.用发起请求,获得原码: 3.用xpath分析源码,提取有用信息: 4.由python格式转为json格式,写入文件 #_*_ co ...
- jvisualvm远程监控服务器tomcat
1.在 {服务器tomcat路径}/bin/catalina.sh 中,的[# OS specific support. $var _must_ be set to either true or f ...
- Android代码速查,写给新手的朋友们[转]
原文地址:http://www.open-open.com/lib/view/open1397286499090.html 0 android 创建按钮 Button button = new But ...
- [C++] Swap Two Num
Swap Two Num