用心分享|架构 Tomcat源码分析

提示:学习笔记 欢迎指点


Tomcat首先是一个Servlet容器。所谓Servlet,其实就是Sun为了让Java能实现动态可交互的网页,从而进入Web编程领域而制定的一套标准!

一个Servlet主要做下面三件事情:

  1. 创建并填充Request对象,包括:URI、参数、method、请求头信息、请求体信息等
  2. 创建Response对象
  3. 执行业务逻辑,将结果通过Response的输出流输出到客户端

Servlet没有main方法,所以,如果要执行,则需要在一个容器里面才能执行,这个容器就是为了支持Servlet的功能而存在,Tomcat其实就是一个Servlet容器的实现。

1、整体架构图

在这里插入图片描述
从上图我们看出,最核心的两个组件–连接器(Connector)和容器(Container)起到心脏的作用,他们至关重要!他们的作用如下:

1、Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;
2、Container用于封装和管理Servlet,以及具体处理Request请求;

2、容器整体结构

Tomcat有多个容器组成,而Container也就是容器与Connecter连接器是Tomcat最核心的两个模块,Connecter连接器接收客户端的请求,并根据客户端的请求传递给Container处理并作出相应。

Tomcat中有多个层次的容器对象:Engine、Host、Context、Wrapper,这些容器是有层级关系的。

  • Engine:代表整个Tomcat的Servlet引擎,可以包含一个或多个子容器
  • Host: 表示一个虚拟主机,包含多个Context
  • Context :表示一个ServletContext,包含一个或多个Wrappers容器
  • Wrappers:表示一个独立的Servlet定义,可以是多个servlet或一个servlet实例

所有的容器都继承ContainerBase抽象类, ContainerBase抽象类实现Container接口,Container继承Lifecycle接口用于实现对容器的生命周期的统一管理。
Container接口定义了静态字段来表示添加或移除子容器时的事件类型(如下图):
在这里插入图片描述

通过下面图片( ContainerBase类图)我们看下ContainerBase的类结构,由于篇幅有限方法过多这里就不列出接口、类的字段与方法了:
在这里插入图片描述

  1. Lifecycle接口:就是我们前面介绍过的用于控制Tomcat所有组件生命周期的接口定义。
  2. LifecycleBase抽象类:实现了Lifecycle接口用户Tomcat所有组件生命周期的管理类。
  3. MBeanRegistration接口:用于使Tomcat支持JMX而定义的接口。
  4. LifecycleMBeanBase抽象类:继承了LifecycleBase与实现了MBeanRegistration接口,实现了JMX的支持。
  5. Container接口:就是我们所有容器的接口,定义了容器通用的字段还有方法。
  6. ContainerBase抽象类:所有容器的基类,实现了一些子容器管理的方法(添加、移除、查找),子容器的启动、实现了容器事件监听对象的管理、包括对Loader、 Logger、Manager、Realm、Resources组件的管理、还包括了Pipeline、Valve对象的管理等。

Tomcat所有容器类图如下(省略了字段、方法):
在这里插入图片描述

----结束----

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值