• Tomcat容器结构 = 四大容器 + 连接器


    Tomcat容器结构 = 四大容器 + 连接器

    在这里插入图片描述

    执行顺序:

    浏览器 -> tomcat server-> service ->connector -> engine(引擎) -> host(主机) -> web应用

    Server:

    Tomcat中最顶层的容器是Server,代表着整个服务器,一个Tomcat中只有一个Server从上图中可以看出,一个Tomcat中只有一个Server,用于具体提供服务,且整个 Tomcat 的生命周期由 Server 控制。
    一个Server可以包含多个Service。

    Service:

    Service主要包含两个部分:Connector和Container。即:Tomcat容器结构 = 四大容器 + 连接器, Tomcat 的心脏就是这两个组件,他们的作用如下:
    1、Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;
    2、Container用于封装和管理Servlet,以及具体处理Request请求;
    一个Service只有一个Container,但是可以有多个Connectors,这是因为一个服务可以有多个连接,也可以提供向相同协议不同端口的连接。

    Connector:

    Connector用于接受请求并将请求封装成Request和Response,然后交给Container进行处理,Container处理完之后在交给Connector返回给客户端。
    在这里插入图片描述

    Connector的结构图:
    在这里插入图片描述

    ProtocolHandler + Acceptor 来完成接受请求和交互给Container的工作的,具体来书,Connector由包含了三个部件:Endpoint、Processor、Adapter。

    • ProtocolHandler
      (1)AbstractEndpoint
      AbstractEndpoint具体实例是Endpoint,Endpoint用来处理底层Socket的网络连接,在AbstractEndpoint里面定义的Acceptor和AsyncTimeout两个内部类和一个Handler接口。
      Acceptor用于监听请求.
      Handler用于处理接收到的Socket,在内部调用Processor进行处理。
      AsyncTimeout用于检查异步Request的超时.
      (2)Processor
      Processor用于将Endpoint接收到的Socket封装成Request。

      注意:Endpoint 和 Processor他们处理的协议是不同的。
      Endpoint由于是处理底层的Socket网络连接,因此Endpoint是用来实现 TCP/IP协议的。
      Processor用来实现HTTP协议的。

    • Adapter
      Adapter用于将Request交给Container进行具体的处理。就是将Request请求适配到Servlet容器进行具体的处理过程。

    Container容器( Tomcat的四大容器:Engine、Host、Context、Wrapper

    Container的结构图:
    在这里插入图片描述

    Engine:

    Engine用来管理多个站点,一个Service最多只能有一个Engine;
    Engine是Servlet处理器的一个实例,即servlet引擎,默认为定义在server.xml中的Catalina。Engine需要defaultHost属性来为其定义一个接收所有请求的虚拟主机host组件。

    Host:

    Host代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;
    Host是Engine的子容器。一个 Host 在 Engine 中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用、接收并处理请求、保存一个主机应该有的信息。

    Context:

    一个Context代表一个应用程序,或者一个WEB-INF目录以及下面的web.xml文件。
    Context 代表 Servlet 的 Context,它具备了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 可以没有 Engine 和 Host。Context 最重要的功能就是管理它里面的 Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的,还有一点就是 Context 如何才能找到正确的 Servlet 来执行它呢? Tomcat5 以前是通过一个 Mapper 类来管理的,Tomcat5 以后这个功能被移到了 request 中,在前面的时序图中就可以发现获取子容器都是通过 request 来分配的

    Wrapper:

    每一Wrapper封装着一个Servlet;
    一个Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括Servlet 的装载、初始化、执行以及资源回收。
    Wrapper 是最底层的容器。
    Wrapper 的实现类是 StandardWrapper,StandardWrapper 还实现了 ServletConfig,由此看出 StandardWrapper 将直接和 Servlet 的各种信息打交道。

  • 相关阅读:
    使用EPPlus实现C#控件Excel文件内容导入转换
    【评论内容关键词提取】多种主流提取算法与大模型测试
    基于TF-IDF代码实战:文本实体关系抽取 有代码数据可直接运行
    力扣LeetCode算法题 第6题-Z 字形变换
    Python基础dict字典定义与函数
    如何准备好一场vue面试
    SystemVerilog验证——数据类型
    如何区分人工智能生成的图像与真实照片(下)
    MySQL数据库和表的基本操作
    买卖股票的最佳时机
  • 原文地址:https://blog.csdn.net/tsj11514oo/article/details/127607573