首先dowload源码并导入到Eclipse中,导入后代码代码的层次如下图所示。先简单来看下tomcat源码的结构。javax这个包主要是有关JavaEE规范的,比如Servlet等等,并不是我们主要分析的。需要分析有org.apache下的子包,其中catalina中很重要,其中tomcat的启动就在该包下中的startup包下,

catalina下还定义了tomcat容器(server,service,engine,host,context)的接口。其中对接口的实现也在该包下,org.apache.catalina.core下。包括tomcat管道机制,各个wraper的实现也在这个包下,因此这也是tomcat最为核心东一个包。

我们再来看下connector,见名知意,这个包是负责处理请求的,最终请求会进入到这个包下的CoyoteAdapter中service方法来处理。

我们继续来说下coyote这个包,这个包偏底层一些,其会对socket传输来的数据进行包装,然后再转给实现来Adapter接口的类,其中具体实现也是由catalina下的CoyoteAdapter来实现,这个包下主要是对TCP/IP传输来东数据进行处理,其由两种实现方式,一种是采用ajp协议,另外一种则是采用http协议,简单来说,这个包就是把TCP/IP(通过Socket)层传输来的对象进行包装,包装为ajp或者http的对象,然后转发到catalina下的connector中进行处理。

接下来我们简单对tomcat这个包做下分析,其中核心在于util包下,其中threads包下是tomcat对线程池做了自己的扩展(在Executor框架基础上)。其中最核心的地方在于net包下,这个包是真正来出来网络的,即请求过来会首先来到这个包下(注意:现在还是处于TCP/IP层面上并没有到来http层面),其中JIOEndpoint也是由我们核心去分析的,该类是实际处理Socket请求,其中如何接受请求并将请求转到工作线程去处理都是在这个包下来实现。

说完了tomcat的代码package组织,我们继续来看看Tomcat的架构图,下图是我从网上搜到的一幅架构图,基本能完整的说明其架构。

  我们开始详细来说明一下Tomcat的各个结构。在这张架构图中我们看到了tomcat的容器机构,其最大的容器为server,server下包含1至N个service容器,service容器下又包含1至N个Engine容器,Engine容器下则包含1至N个Host容器(Host即对应我们的域名),同样,Host容器则包含1至N个Context容器(Context也就是我们通常的JavaWeb应用)。在实际生成环境中,我们通常只会有一个Server容器,一个Service容器,一个Engine容器,但经常会有多个Host容器,多个Context容器(往往也是一个Host下只有一个Context),尤其是在分布式的环境下,往往是多个Host容器。在这里还要特殊说明一下Connector,Connector是在Service容器之中,tomcat默认会配置两个Connector,一个Connector是负责处理http协议,另一个Connector则是负责处理tomcat自身的一种协议ajp,后续我们会对http协议的Connector作为详细阐述。

  凡是用过Tomcat的开发者一定也会对tomcat下conf文件夹中的server.xml文件有一定的了解。其server.xml大致如下。其中server.xml的最大的父节点是server,该server其接口规范是由org.apache.catalina.Server这个接口定义,其具体实现由org.apache.catalina.core.StandardServer实现,在后续的文章中我们会对其进行具体阐述。同理,Engine、Host、Context容器也在org.apache.catalina该包下有其特定的接口规范,其实现都在org.apache.catalina.core这个包下。

下一节我们会对Tomcat的父子容器进行具体的阐述。

转载于:https://www.cnblogs.com/yanfengfree/p/6063960.html

tomcat源码分析(一)从tomcat架构说起相关推荐

  1. Tomcat源码分析(一)------ 架构

    废话少说,拉代码,导入eclipse开干,具体步骤可以参考http://hi.baidu.com/hateeyes/blog/item/7f44942a20ad8f9d023bf66d.html 下面 ...

  2. Tomcat源码分析--转

    一.架构 下面谈谈我对Tomcat架构的理解 总体架构: 1.面向组件架构 2.基于JMX 3.事件侦听 1)面向组件架构 tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成 ...

  3. Tomcat源码分析

    Tomcat源码分析 ` 最近深入了解了下tomcat的源码,在此记录下 文章目录 Tomcat源码分析 前言 一.Tomcat整体架构是什么? 1)分析配置文件server.xml, 2)网上盗个图 ...

  4. tomcat源码分析_百战卓越108天tomcat和servlet源码分析

    训练大纲(第105天) 大家如果想快速有效的学习,思想核心是"以建立知识体系为核心",具体方法是"守破离".确保老师课堂上做的操作,反复练习直到熟练. 第209 ...

  5. Tomcat源码分析(九)--Session管理

    本系列转载自 http://blog.csdn.net/haitao111313/article/category/1179996 在明白Tomcat的Session机制之前,先要了解Session, ...

  6. Tomcat源码分析(十)--部署器 转载

    本系列转载自 http://blog.csdn.net/haitao111313/article/category/1179996 我们知道,在Tomcat的世界里,一个Host容器代表一个虚机器资源 ...

  7. tomcat源码分析--初始化与启动

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 在阅读tomcat源码前,我们一般都会有如下几个疑问: - web容器和servlet容器的区别是什么: - 在spr ...

  8. java tomcat源码_详解Tomcat系列(一)-从源码分析Tomcat的启动

    在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来. 由于篇幅的原因, 很难把Tomcat所有的知 ...

  9. tomcat源码分析_CVE-2020-9484 tomcat session反序列化漏洞分析

    作者:N1gh5合天智汇 title: CVE-2020-9484 tomcat session反序列化漏洞分析 tags: CVE,Tomcat,反序列化 grammar_cjkRuby: true ...

最新文章

  1. linux自带的cd刻录,linux下刻录CDROM的命令
  2. 2016.8.11 DataTable合并及排除重复方法
  3. 微软总裁:比尔盖茨人生简介和名言
  4. array initization in matlab zeros(1000)
  5. Google Spanner:谷歌的全球分布式数据库
  6. C#线程调用带参数的方法,给控件赋值
  7. Oracle 数据怎么实时同步到 SQL Server | 亲测干货分享建议收藏
  8. android 怎么获取app 字体颜色,Android APP使用自定义字体实现方法
  9. 如何用 Python 拆分表格并发送邮件?
  10. puzzles —— 111、222、333、444、555、666、777、888、999
  11. Hadoop中MR程序的几种提交运行模式
  12. linux常用命令技巧
  13. C# 静态类初始化 结构体初始化
  14. IEEE802.5 令牌环网
  15. Adobe Premiere(pr)2021 安装教程【64位】
  16. 批量读取word docx文件指定表格内容,保存在excel文件中
  17. 程序员的一天:程序员每天工作是怎样的?带你看看!!
  18. 网络工程师必知的几款网络故障排除工具
  19. Win10+Linux双系统删除Linux
  20. logstash问题记录:Attempted to resurrect connection to dead ES instance, but got an error

热门文章

  1. 解决Python中字典出现“TypeError: 'dict_keys' object does not support indexing”错误
  2. 深度学习(四十五)条件对抗网络
  3. 前端代码获取文件大小_vue技术栈前端建设方案
  4. java方便适配器_Java适配器
  5. java异常处理试题答案_java试题及答案
  6. JAVA 获取操作系统属性
  7. 华为已经升级鸿蒙系统的机型,鸿蒙系统名单已确认!覆盖55款机型,这些手机将被淘汰!...
  8. matlab lti全响应,《LTI系统的响应——实验报告》.doc
  9. fossid安装教程_Win10环境下6sV2.1模型编译
  10. [URAL1962]并查集