当前位置: 首页 > news >正文

tomcat组件架构设计

目录

1 Connector高内聚低耦合设计

1.1 ProtocolHandler组件

1.2 Endpoint组件

1.3 Processor组件

1.4 Adapter组件

2 Container父子容器组合模式设计

3 Pipeline-Value责任链模式设计

4 tomcat组件生命周期设计


1 Connector高内聚低耦合设计

优秀模块设计应该考虑高内聚低耦合设计

  • 高内聚相关度比较功能可能集中不要分散
  • 低耦合两个相关模块尽可能减少依赖的部分和降低依赖程序不要两个模块产生强依赖

tomcat连接器需要实现功能

  • 监听网络端口
  • 接受网络连接请求
  • 根据具体应用协议HTTP/AJP)解析字节流生成同一Tomcat Request对象
  • tomcat Request对象转换标准ServletRequest
  • 调用Servlet容器得到ServletResponse
  • ServletResponse转换Tomcat Response对象
  • tomcat Response转成网络字节流
  • 响应字节流客户端

分析如上功能可知连接器需要3高内聚功能

  • 网络通信
  • 应用协议解析
  • Tomcat Request/ResponseServlet Request/Response转换

因此tomcat设计3组件负责实现上述3功能

  • EndPoint负责处理连接读取字节Processor
  • Processor解析字节生成tomcatRequestAdapter
  • Adaptertomcat request转成ServletRequest对象容器

组件之间通过抽象接口交互各个组件隔离有助于增加复用性降低系统耦合度

1.1 ProtocolHandler组件
  • 由于I/O模型应用协议可以自由组合比如NIO+HTTP或者NIO2+AJP
  • tomcat设计者网络通信应用层协议解析放在一起考虑设计了一个ProtocolHandler接口封装两种变化
  • 各种协议通信模型的组合有相对应具体实现比如Http11NioProtocolAjpNioProtocol
  • tomcat设计了一些抽象封装不变的逻辑比如AbstractProtocol实现ProtocolHandler接口然后每一种应用协议自己抽象基类比如AbstractAjpProtocolAbstractHttp11Protocol具体协议实现扩展了协议抽象基类

  • 连接器使用ProtocolHandler来处理网络连接应用层协议
  • 连接器使用ProtocolHandler接口封装通信信息I/O模型差异
  • ProtocolHandler内部分为EndpointProcessor模块
  • Endpoint负责底层Socket通信
  • Processor负责应用协议解析
  • 连接器通过适配器Adapter调用容器

1.2 Endpoint组件
  • Endpoint通信端点监听通信接口具体Socket接受发送处理
  • Endpoint传输层抽象对应公共抽象类AbstractEndpoint具体子类对应具体NIOAIOAPRI/O模型

  • Endpoint实现中有两个重要的组件AcceptorSocketProcessor
  • Acceptor用于监听Socket连接请求
  • SocketProcessor用于处理接收Socket请求即Socket的读事件)
  • SocketProcessor提交线程池执行sever.xml配置Executor
  • SocketProcessor处理socket请求最终提交协议处理组件Processor

1.3 Processor组件
  • Processor用来实现HTTP/AJP协议
  • Processor接收来自EndpointSocket字节流解析TomcatRequestResponse对象
  • Processor将请求通过Adapter提交到容器处理

  • Processor组件解析socket数据生成TomcatRequest对象调用Adapterservice方法
1.4 Adapter组件
  • 由于协议不同客户端发送过来的请求信息也不相同
  • Tomcat自定了自己Request存放这些信息
  • Processor负责解析请求生成Tomcat Request对象
  • CoyoteAdapter负责Tomcat Request对象转为标准ServletRequest然后调用Engine容器Pipeline

2 Container父子容器组合模式设计
  • tomcat通过组合设计模式管理EngineHostContextWrapper容器
  • EngineHostContextWrapper继承了Container顶级接口
  • Container接口具备管理容器子容器列表能力

3 Pipeline-Value责任模式设计

  • Adapter执行service方法拿到Engine容器Pipeline的第一个Valve对象并执行invoke方法
  • 然后通过责任链方式调用Pipeline所有Valve对象
  • Engine容器最后一个Valve对象StandardEngineValve拿到Request对象Host然后调用Host容器Pipeline第一个Valve对象后面类推

Valve接口

Pipeline接口

  • Pipeline维护了firstValve和basicValve对象
  • 然后Valve存在next属性指向下一个Valve对象
  • 通过以上方式Pipeline间接维护所有Valve对象
4 tomcat组件生命周期设计
  • tomcat组件生命周期设计主要包含方面
  • 其一初始化启动停止销毁方法回调
  • 第二这些生命周期方法执行前后可扩展机制

  • tomcat通过父子容器方式管理所有EngineHostContextWrapper容器这样通过Engine容器找到所有子容器
  • Service组件维护Engine容器引用
  • Server组件维护Service组件列表
  • 以上所有组件实现Lifecycle接口实现各自初始化启动停止销毁阶段
  • 启动调用Server组件init,start方法Server组件负责调用自己维护各个Service组件init,start方法依此类推就完成所有组件初始化启动方法回调
  • 停止启动逻辑类似完成停止销毁方法回调

  • tomcat组件生命周期方法执行前后可扩展机制通过事件来完成
  • 比如启动前后发布对应事件如果需要扩展只需添加监听器监听对应事件即可
  • tomcat定义如下事件

tomcat组件生命周期状态变化

tomcat组件生命周期继承体系

相关文章:

  • 【仿生机器人】建模—— 图生3D 的几个办法
  • 2020年IS SCI2区,多样本和遗忘能力粒子群算法XPSO,深度解析+性能实测
  • 阿里云服务状态监控:实时掌握云服务健康状况
  • 基于cornerstone3D的dicom影像浏览器 第三十一章 从PACS服务加载图像
  • 生态系统服务(InVEST模型)供给与需求、价值核算技术及人类活动、重大工程项目、自然保护区、碳中和等
  • 如何在网页里填写 PDF 表格?
  • 免费在线PDF转图片工具
  • XXE漏洞知识
  • 免费PDF转图片软件
  • 学习 Hooks【Plan - June - Week 2】
  • 免费PDF转图片工具
  • 在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
  • 一桩多用:新能源汽车智慧充电桩的多元化智能管理方案
  • 深入理解 S3 标签字符清洗的正则表达式实践
  • 解决ubuntu20.04无法唤醒的问题的一种方法
  • 2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】
  • 多模态学习路线(2)——DL基础系列
  • 视觉slam十四讲实践部分记录——ch2、ch3
  • Linux字符串占用空间统计方法
  • Web APIS Day01
  • 商城系统app/拼多多关键词优化步骤
  • 住房和城乡建设部网站园林一级/优化什么
  • 网站开发培训机构/关键词优化排名软件
  • 国外打开国内网站慢/优化大师好用吗
  • 广州网站建设腾虎/百度百家号登录入口
  • 淘宝客 网站无备案/公关服务