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源码啦,加油~
随机推荐
- C语言之单链表的使用
#include <stdio.h> #include <stdlib.h> typedef struct LNode{ int data; struct LNode *nex ...
- My97DatePicker日期控件的使用
本文演示如何在MyEclipse项目中使用My97DatePicker日期控件 1.下载My97DatePicker日期控件, My97DatePicker日期控件下载地址 2.在MyEclipse项 ...
- wamp 初始化 修改mysql密码
1.设置phpmyadmin 在WampServer安装完成后,通过http://localhost/打开后可以看到WampServer自带的一个简单的页面,里面有phpinfo.phpmyadmin ...
- (转)libvirt API的基本概念
本文摘自:http://blog.sina.com.cn/s/blog_da4487c40102v31i.html libvirt对象 libvirt的对象向外展现了虚拟化环境的所有资源.libvir ...
- out.write(b,0,len)怎么解释?
参数 缓冲区——要写的数据 从——开始偏移量数据 len——写的字节数 返回值 这个方法不返回一个值. 异常 IOException
- 蒟蒻LQL的博客
这里是蒟蒻LQL的博客!!! 一枚水的不能再水的弱校ACMer···· 可能会在这写一些题解或者别的什么乱七八糟的··· 可能大概没什么人看,就当错题本好了o(* ̄▽ ̄*)ブ 因为太弱了难免有错误!发 ...
- centos6.5 源码安装 mysql
1.下载源码包 我的版本:mysql-5.6.4-m7.tar.gz 2.安装之前先卸载CentOS自带的MySQL [root@localhost ~]# yum remove mysql 3.编译 ...
- jmeter 读取mysql数据库
业务背景 当我们用jmeter进行压测,或者造数据的时候,我们可能希望每次请求的参数都是随机的.如果从一个文件里读取,很难达到要求.jmeter提供了一套读取数据库的组件,能满足部分要求.但性能不好, ...
- TCP与UDP与HTTP协议
http:是用于www浏览的一个协议.tcp:是机器之间建立连接用的到的一个协议. 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.在网络层有IP协议.ICMP协议.ARP协议.R ...
- Mongodb基于oplog恢复至任意时间
背景: 最近后端基于mongo的项目越来越多,MySQL基于冷备份+binlog可以恢复至任意时间点,那么mongo是否有同样的功能呢?经过调研发现可以通过dump+oplog可以实现粒度更细致的恢复 ...