【Tomcat】第二篇:图解Tomcat架构演变

源码环境配置

  1. 导入源码包
  2. 编辑运行配置,设置入口类以及项目构建目录(build目录)
  3. 根据本地情况修改项目JDK版本,与字符编码

1.Tomcat架构演变历史

1.1 单server

Server 负责监听socket,解析请求,完成相关任务,返回处理结果
在这里插入图片描述

  • Start():启动服务器,打开socket连接,监听服务端口,接受客户端请求、处理、返回响应
  • Stop():关闭服务器,释放资源
  • 缺点:请求监听和请求处理放一起扩展性很差(协议的切换 tomcat独立部署使用HTTP协议,与Apache集成时使用AJP协议)

1.2 网络协议与请求处理分离

将Server拆分成两部分:Connector组件与Container组件

  • Connector
    • 开启Socket并监听客户端请求,返回响应数据;
    • 一个Connector对应一个端口
  • Container:负责具体的请求处理

1.3 引入service 中间层

service 负责管理Connector与Container并建立映射关系

在这里插入图片描述

  • 一个Server可以包含多个Service,每一个Service都是独立的,他们共享一个JVM以及系统类库。
  • 一个Service负责维护多个Connector和一个Container
    • 这样来自Connector的请求只能有它所属的Service维护的Container处理;当需要使用多个端口时,就要配置多个service
    • 在这里Container是一个通用的概念,为了明确功能,并与Tomcat中的组件名称相同,可以将Container命名为Engineer
  • Tomcat默认会启动一个名为Catalina的Service

1.4 通过任务拆分实现Container

将 Container 分成了四部分:Engine,Host,Context,Wrapper,并且通过责任链模式串联
在这里插入图片描述

  • Engine:没有父容器,一个 Engine代表一个完整的 Servlet 引擎,它接收来自Connector的请求,并决定传给哪个Host来处理,Host处理完请求后,将结果返回给Engine,Engine再将结果返回给Connector。
  • Host:表示一个虚拟主机,即一个Tomcat可以拥有多个域名;这么设计符合tomcat初期,服务器资源紧张,一台服务器需要部署多个不同域名的服务;一个Engine可以有多个Host
  • Context:表示一个web应用,即webapp下的应用;一个Host可以有多个Context
  • Wrapper:表示一个servlet,用来具体处理相应请求;一个Context可以有多个Wrapper

1.5 组件统一管理:给所有组件都加上生命周期(LifeCycle)

在这里插入图片描述

  • 生命周期包括包括
    • 生命周期状态:BEFORE_INIT_EVENT,AFTER_INIT_EVENT,START_EVENT等
    • 生命周期方法:init(), start(), stop, getState()等
  • 每个组件都有生命周期
    • Connector:直接实现LifeCycle接口
    • Container:Container本身就是接口,它实现了LifeCycle,所以它的具体实现类们就有了生命周期

2.Tomcat总体架构图解

在这里插入图片描述

2.1 Connector

  • Endpoint用于处理底层Socket 的网络连接,即实现TCP/IP协议
  • Processor 用于将Endpoint 接收到的Socket 封装成Request,即实现HTTP协议
  • Adapter 用于将封装好的Request 交给Container 进行具体处理。

2.2 Container

文末附上一篇参考链接

猜你喜欢

转载自blog.csdn.net/weixin_43935927/article/details/108639997
今日推荐