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源码啦,加油~
随机推荐
- 遍历List集合时,删除数据的问题
一.问题描述 有时候,我们会遇到在遍历List集合的过程中删除数据的情况. 看着自己写的代码,感觉完全没有问题,但就是达不到预期的效果,这是为什么呢?下面我们来分析下 String str1 = ne ...
- Android 自定义组件之 带有悬浮header的listview
最近做项目遇到一个需求,要做一个带有悬浮header的listview,即,当listview滑动时,header消失,静止时header浮现. 这个需求看似简单,实际做起来还是会遇到不少的困难,特此 ...
- ios学习杂记
commond + alt + enter Xcode分屏.拖动xib连线
- DBArtist之Oracle入门第3步: 安装配置PL/SQL Developer
操作系统: WINDOWS 7 (64位) 数据库: Oracle 11gR2 (64位) PL/SQL Developer : PL/SQL ...
- 76-Relatives-欧拉函数
http://poj.org/problem?id=2407 Relatives Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- (转)Android SDK Manager国内无法更新的解决方案
转载地址:http://www.linuxidc.com/Linux/2015-01/111958.htm 现在由于GWF,google基本和咱们说咱见了,就给现在在做Android 或者想学习An ...
- code1047 邮票面值设计
dfs+dp dfs枚举每种情况,每层递归确定第k个数i:i = a[k-1]+1 to a[k-1]*n+1 当枚举完一个序列时,使用check()测试它能达到的max 使用dp.设dp[i]为凑成 ...
- 洛谷 P3112 [USACO14DEC]后卫马克Guard Mark
题目描述 Farmer John and his herd are playing frisbee. Bessie throws the frisbee down the field, but it' ...
- easyui 获取当前页签选中的名称
parent.parent.$("#tabs").tabs('getSelected').panel('options').title == "收藏夹管理"
- Nlog- Application Logging in C#
当你在谷歌搜索 Application Loggin in C#,排在最前面的是这个 .NET Logging Tools and Libraries ,点击进去你会发现里面收录了不错的日记工具及文 ...