Tomcat源码分析-Tomcat整体架构

Posted

Catch Spark. Code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat源码分析-Tomcat整体架构相关的知识,希望对你有一定的参考价值。

一、整体说明

tomcat需要完成两件事情:

  • 接受外部HTTP请求
  • 加载servlet,并且把请求传给Servlet进行处理。

整体可以抽象为如下:

 二、整体代码架构

在tomcat的代码中抽象了以下三个类:

  • Server类,代表tomcat实例
  • Connector类,代表HTTP监听器(上图中的HttpServer)
    • A "Connector" represents an endpoint by which requests are received
               and responses are returned
    •   多个connector代表监听后处理模式不同,比如bio,nio等。
  • Container类,代表Servlet容器

另外还抽象了一个Service类,用来包装Connector和Container类。

A "Service" is a collection of one or more "Connectors" that share
       a single "Container" Note:  A "Service" is not itself a "Container",
       so you may not define subcomponents such as "Valves" at this level

其中

  • 一个Server可以有多个Service【实际应用场景中,一般来说只有一个】,
  • 一个Service可以对应多个Connector【实际应用场景中,一般来说只有一个】,
  • 一个Service对于一个Container。

整体代码架构如下:

上图中Connector监听到请求后最终把HTTP(TCP)请求转换成了Servlet请求传给Container。

三、Service类分析

tomcat中Service类的实现类是StandardService类

 Service接口核心代码

public interface Service  {

    public Engine getContainer();

    public void setContainer(Engine engine);

    public Server getServer();

    public void setServer(Server server);


    public void addConnector(Connector connector);

    public Connector[] findConnectors();

    public void removeConnector(Connector connector);
   
}

 可以看到Service主要负责调度Connector和Container。

以上是关于Tomcat源码分析-Tomcat整体架构的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat卷一 ----架构和初始化源码分析

TOMCAT封神之旅-源码运行及整体架构

二:Tomcat源码之整体架构与启动流程

mysql jdbc源码分析片段 和 Tomcat's JDBC Pool

死磕Tomcat之整体架构

Tomcat 学习进阶历程之Tomcat架构与核心类分析