• Tomcat -- 整体架构


    HTTP工作原理

    ● 规定浏览器和服务器之间的数据传输协议,基于TCP/IP协议传递数据,不涉及数据包的传输,主要规范了客户端与服务器端的通信格式

    一个请求流程

    其中tomcat主要参与接受连接,解析请求数据,处理请求,发送响应结果
    在这里插入图片描述

    1. 用户通过浏览器进行操作,点击链接等,浏览器获取到这个事件
    2. 浏览器向服务器发出TCP链接请求
    3. 服务程序接收浏览器的请求,通过TCP三次握手建立连接(linux底层握手)
    4. 连接成功后,浏览器将请求数据打包成一个HTTP协议格式的数据包
    5. 浏览器将该数据包推入网络中,数据包经过网络传输,最终达到服务端程序
    6. 服务端程序拿到这个数据包,同样用HTTP协议格式解析,获取到客户端的操作意图(tomcat连接器,封装Request对象)
    7. 根据客户端的操作意图进行处理,提供数据
    8. 服务器将处理响应结果用HTTP再次打包
    9. 服务器将该数据包推入网络中,数据包经过网络传输,最终达到客户端浏览器
    10. 浏览器拿到数据包后,以http协议的格式解析,比如得到html
    11. 浏览器将html展示给用户

    Tomcat整体架构

    在这里插入图片描述

    Http服务器请求处理

    ● http服务器不直接调用业务类,把请求交给Servlet容器来处理
    ● 容器通过servlet接口调用业务类,实现http服务器与业务类解耦
    在这里插入图片描述

    servlet容器工作过程

    ● 客户端请求某个资源的时候,http服务器会用一个ServletRequest对象把客户端的请求信息封装起来,调用Servlet容器的service方法
    ● Servlet容器拿到请求后,根据请求的URL和Servlet的映射关系,找到相应的处理的Servlet
    ● 如果此时Serlvet容器还没有被加载就会通过反射机制创建这个Servlet,并调用其init方法完成初始化
    ● 而后调用Servlet的service方法来处理请求
    ● service处理的结果会被封装到ServletResponse对象中返回给HTTP服务器
    ● http服务器将响应结果发送给客户端
    在这里插入图片描述

    tomcat两个核心

    ● 连接器(Connector):负责对外连接。处理Socket连接,负责网络字节流与Request和Response对象的转化
    ● 容器(Container):负责内部处理。加载和管理Servlet,处理具体Request请求
    在这里插入图片描述

    连接器Connector

    Coyote

    ● tomcat中连接器框架,是tomcat服务器提供客户端访问的外部接口
    ● 客户端通过Coyote与服务器实现 建立连接、发送请求、接收响应
    在这里插入图片描述

    Coyote与Catalina容器的交互

    ● Coyote封装了底层网络通信(Socket),为Catalina容器提供统一的接口,使Catalina容器与具体的请求协议和IO操作完全解耦
    ● Coyote只负责具体协议和IO相关操作,与Servlet规范没有直接关系,Request和Response对象也是在Catalina中对其进一步封装为ServletRequest和ServletResponse
    ● Coyote将Socket输入的对象封装为Request对象,Servlet相关都交给Catalina处理,由Catalina容器进行请求处理,实现组件之间解耦
    ● 请求处理完成,Catalina通过Coyote提供的Response将结果写入输出流
    在这里插入图片描述

    支持的IO模型与协议

    IO模型

    IO模型描述
    BIO阻塞IO,tomcat8.5之后移除了对的该IO模型的支持
    NIO非阻塞IO,javaNIO类库实现
    NIO2异步IO,NIO2类库实现
    APR使用Apache可移植运行库实现,需要单独安装APR库

    应用层协议

    应用层协议描述
    HTTP/1.1大部分web协议采用
    HTTP/2.0tomcat8.5之后版本支持,大幅度提醒web性能
    AJP用于与web服务器集成,实现对静态资源的优化及集群部署

    连接器组件

    在这里插入图片描述

    组件作用
    EndPointEndpoint是Coyote通信端点,即通信监听的接口,是具体socket接收和发送处理器,是对传输层的抽象; Endpoint用来实现TCP/IP协议
    ProcessorProcessor是Coyote协议处理接口,用来实现Http协议;Processor接收来自EndPoint的Socket,读取字节流解析成的Tomcat Request和Response对象,并通过Adapter适配交给容器处理;Processor是对应应用层协议的抽象
    ProtocolHandler是Coyote协议接口,通过Endpoint和Processor实现针对具体协议的处理能力;Tomcat按照协议和IO提供6个实现类: AjpNioProtocol, AjpAprProtocol, Http11NioProtocol, Http11Nio2Protocol, Http11AprProtocol
    Adapter由于协议不同,客户端发过来的请求信息不尽相同;tomcat定义了自己的Request类来封装这些请求信息;ProtocolHandler接口负责解析请求并生成Tomcat Request类,通过CoyoteAdapter适配为selvert容器可以解析的ServletRequest,执行对应的service方法

    EndPoint

    • 对传输对象层的抽象,用来实现TCP/IP协议
    • Coyote通信端口,通信监听的接口,具体Socket的接收和发送处理器
    • tomcat提供了抽象类AbstractEndPoint,定义了Acceptor和SocketProcessor
    • Acceptor:用于监听Socket请求
    • SocketProcessor:用于处理接收到的Socket请求,最终实现Runnable,在run/doRun方法里调用协议处理组件Processor进行处理,为提高性能,SocketProcessor被提交给Executor执行器线程池来管理

    Processor

    • 对应用层协议的抽象,EndPoint实现了TCP/IP协议,Processor实现了HTTP协议
    • Coyote协议处理接口,接收EndPoint的Socket
    • 读取字节流解析成Tomcat的Request和Response对象,并通过Adapter将其提交给容器处理

    ProtocolHandler

    • Coyote协议接口,同EndPoint和Processor实现针对具体协议的处理能力

    Adapter

    • 使用CoyoteAdapter类,适配Request/ServletRequest和Response/ServletRespose的适配器
    • 由于协议不同,tomcat为了兼容,定义了Request类来接收请求信息
    • ProtocolHandler负责解析请求生成Tomcat的Request对象
    • CoyoteAdapter负责将tomcat的Request适配成Servlet可以解析的ServletRequest标准对象
    • 从而调用Servlet的service方法,实现请求、响应能力

    容器Container

    Catalina

    • tomcat本质是一个Servlet容器,容器的实现由Catalina,涉及到安全、会话、集群、管理等Servlet容器各个方面
    • 通过松耦合方式集成Coyote,完成按照请求协议进行数据读写等

    Catalina结构

    • Catalina负责管理Server,Server表示整个服务器。
    • Server下面有多个服务Service,每个Service包含多个多个连接器组件Connector(Coyote实现)和一个容器组件Container。
    • tomcat启动的时候初始化一个Catalina实例
      在这里插入图片描述
    组件功能
    Catalina负责解析tomcat配置文件,来创建服务器Server组件并对其进行管理
    Server表示整个Catalina Servlet容器及组件,负责组装并启动Servlet引擎,tomcat连接器。通过实现Lifecycle接口,提供一种优雅的启动和关闭整个系统的方式
    Service一个Server包含多个Service组件,它将多个Connector组件绑定到一个Container(Engine)上
    Connector连接器,处理与客户端的通信,负责接收客户端请求,然后转给相关的容器处理,最终向客户端返回响应结果
    Container容器,负责处理用户的servlet请求,返回对象给web用户

    Container

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

    组件功能
    Engine表示整个Catalina的Servlet引擎,用来管理多个host虚拟主机,一个Service最多就一个Engine,一个Engine包含多个Host
    Host代表一个虚拟主机,可以给tomcat配置多个虚拟主机地址,一个虚拟主机下面可以包含多个Context
    Context表示一个web应用程序,可包含多个Wrapper
    Wrapper表示一个(一种?)Servlet,容器最底层
  • 相关阅读:
    反虚拟机、反沙箱技术整理汇总
    VMware虚拟机安装Linux系统的介绍
    mac电脑解决无法打开软件
    在windows服务器上部署一个单机项目以及前后端分离项目
    【神经网络】【VggNet】
    openpose 安装到简单实用 win11
    如果我有一台服务器的话
    Vue3+Element Plus使用svg加载iconfont的解决方案
    移动WEB开发之rem布局--less基础
    第一百五十二回 自定义组件综合实例:游戏摇杆三
  • 原文地址:https://blog.csdn.net/weixin_42413454/article/details/125584556