Tomcat底层原理分析:2.Tomcat架构分析

【专栏目录】
Tomcat底层原理分析:1.基础环境搭建
Tomcat底层原理分析:2.Tomcat架构分析
Tomcat底层原理分析:3.Jasper引擎
Tomcat底层原理分析:4.Tomcatd的server.xml配置内容解析
Tomcat底层原理分析:5.Web应用配置解析
Tomcat底层原理分析:6.Tomcat中对JVM的配置解析
Tomcat底层原理分析:7.Tomcat集群配置解析
Tomcat底层原理分析:8.Tomcat安全性配置解析
Tomcat底层原理分析:9.Tomcat性能调优
【本文导读】

本文主要讲了Tomcat的各个组件之间的关系以及Tomcat底层是如何实现“一个URL定位到一个具体的servlet”。
注:本文图片均来自java进阶教程动手实现Tomcat【黑马程序员精品公开课】,侵权立删。

1.Tomcat整体架构

Tomcat本质上就是一个Servlet容器,所以Catalina就是其核心,其他模块都是为Catalina提供支撑的。比如:通过Coyote提供Sockets通信,Jasper提供JSP引擎,Naming提供JNDI服务,Juli提供日志服务。

【Tomcat分层示意图】
image

【Tomcat架构图】
image

【Tomcat主要核心逻辑简图】
image

【Servlet内部逻辑简图】
image

2.容器-Catalina

2.1Catalina组件

【Catalina容器架构图】
image

组件 职责
Catalina 负责解析Tomcat的配置文件,以此来创建Server组件,并根据命令对其进行管理
Server 表示整个Servlet容器和其他组件,负责组装并启动Servlet引擎、Tomcat连接器。Server通过实现LifeCycle接口,提供了一种优雅的启动和关闭整个系统的方式。
Service 一个Server包含多个Service,它是“若干个Connector”和“一个Container”的组合。
Connector 处理与客户端的通信,负责接收客户端的请求,并转发给Container处理,最后再将Container的处理结果返回给客户端
Container 又叫Servlet容器,也叫Servlet引擎,负责处理Connector转发来的请求,并返回处理结果给Connector

2.2Container容器组件

【Container容器组件架构图】
image

组件 职责
Engine 表示整个Catalina的Servlet引擎,即代表Container。用来管理多个虚拟站点,一个Service最多只能有一个Engine,一个Engine可以有多个Host。
Host 代表一个虚拟主机,即一个站点。一个Engine可以有多个Host,一个Host有可以有多个Context。
Context 代表一个Web应用,一个Context可以包含多个Wrapper。
Wrapper 代表一个Servlet,Wrapper是最底层的基础单位。

2.3Tomcat的server.xml结构

结合server.xml文件结构看,更容易理解Container容器中组件的结构

<Server>
    <Service>
        <Connector></Connector>
        <Connector></Connector>
        <Engine>
            <Host>
                <Context></Context>
                <Context></Context>
            </Host>
        </Engine>
    </Service>
</Server>

3.连接器-Coyote

3.1框架介绍

【连接池和容器的交互过程】
image

  1. Coyote的工作是将Socket的输入输出转换为Request和Response对象,并把Request和Response通过适配器转换成ServletRequest和ServletResponse,用来转发给/接受于Catalina容器
  2. Coyote封装底层网络通信,为Catalina容器提供一套API,使Catalina容器与具体的请求协议以及IO操作方式完全解耦

3.2Tomcat支持的IO模型和协议

【可以略过】

3.3连接器组件

【组件架构图】
image

  1. EndPoint组件用于解析HTTP包中的传输层内容
  2. Processor组件用于解析HTTP包中的应用层内容
  3. 二者由ProtocolHandler组件管理
  4. Processor将HTTP请求封装成Request对象
  5. 再由Adapter转换成ServletRequest对象,转发给Catalina容器

4.Tomcat启动流程

image

一句话总结:整个启动流程做的事情就是加载Tomcat的配置文件,初始化容器组件,监听对应端口号,准备接受客户端请求。

5.Tomcat请求处理流程

客户端浏览器发起对Tomcat发起一个请求,该请求是如何定位到当前Tomcat下的哪个项目的哪个Servlet的过程以及处理该请求的过程就叫做Tomcat请求处理流程。
那么如何定位到的呢?答案是:Tomcat使用Mapper组件。

Mapper组件的功能:将用户请求的URL定位到一个Servlet;

Mapper组件的原理:Mapper组件里保存了Web应用的配置信息,其实就是容器组件与访问路径的映射关系,比如Host容器里配置的域名、Context容器里的Web应用路径,以及Wrapper容器里的Servlet映射的路径,可以将其想象成一个多层次的Map。

由于Mapper的原理,一个URL只会映射到一个Servlet。

【Mapper组件定位Servlet过程示例图】
image

猜你喜欢

转载自blog.csdn.net/w_y_x_y/article/details/106930923