Tomcat笔记①——整体架构

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_35262405/article/details/101552047

Tomcat历史

Tomcat最初有sun公司的架构师James Duncan Davidson开发,名称“JavaWebServer”。

1999与Apache软件基金会旗下的JServ项目合并,也就是Tomcat。

2001 tomcat4.0 里程碑式的版本。完全重新设计了其架构,并实现了Servlet2.3和JSP 1.2规范。

到目前,Tomcat已经成为成熟的Servlet容器产品,并作为 JBoss等应用的服务器的内嵌Servlet容器

版本 6.X 7.X 8.X 8.5.X 9.X
JDK 》=5.0 》=6.0 》=7.0 》=7.0 》=8.0
Servlet 2.5 3.0 3.1 3.1 4.0
JSP 2.1 2.2 2.3 2.3 2.3
EL 2.1 2.2 3.0 3.0 3.0
WebSocket N/A 1.1 1.1 1.1 1.1

Tomcat架构

Tomcat的整体架构如下,Tomcat代表的就是整个Server服务器,它会有许多Service(服务),而Service可以分为两个部分,Connector和Container。
在这里插入图片描述

Server

它接受请求并解析,完成相关任务,返回处理结果,通常情况下使用Socket监听服务器指定端口来实现该功能,一个最简单的服务设计如下:
在这里插入图片描述

  • Start():启动服务器,打开socket连接,监听服务端口,接受客户端请求、处理、返回响应
  • Stop():关闭服务器,释放资源

缺点:请求监听和请求处理放一起扩展性很差(协议的切换 tomcat独立部署使用HTTP协议,与Apache集成时使用AJP协议)

改进:网络协议与请求处理分离

在这里插入图片描述
一个Server包含多个Connector(链接器)和Container(容器)

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

缺点:Connector接受的请求由那个Container处理,需要建立映射规则

所以就出现了service组件

Service

在这里插入图片描述
一个Server可以包含多个Service,每一个Service都是独立的,他们共享一个JVM以及系统类库。

一个Service负责维护多个Connector和一个Container,这样来自Connector的请求只能有它所属的Service维护的Container处理。

在这里Container是一个通用的概念,为了明确功能,并与Tomcat中的组件名称相同,可以将Container命名为Engineer。
在这里插入图片描述

Engine

在Engine容器中需要支持管理WEB应用,当接收到Connector的处理请求时,Engine容器能够找到一个合适的Web应用来处理,因此在上面设计的基础上增加Context来表示一个WEB应用,并且一个Engine可以包含多个Context。

在这里插入图片描述
缺点:应用服务器需要将每个域名抽象为一个虚拟主机。

在这里插入图片描述
在一个web应用中,可以包含多个Servlet实例来处理来自不同的链接请求,因此我们还需要一个组件概念来表示Servlet定义,即Wrapper。
在这里插入图片描述
在前面的多次Container容器中,有Engine、Host、Context、Wrapper等,可以理解为Container的子类。

在这里插入图片描述

Connector

Connector属于链接器,负责请求的接受和响应,监听socket服务,读取请求信息。按照协议解析请求
配置对应的容器。

当然单一的组件是无法满足这些要求的,自然还需要多种组件相互配合达到目的。首先就是对于端口的监听和接收链接。
在这里插入图片描述

  • ProcessorHandler:作为处理器找到请求
  • EndPoint:监听端口
  • Processor:接收链接

当接收到请求之后自然是将请求分配给对应的容器去执行逻辑,那么就需要一个组件找到对应的容器,并且需要一个组件存储对应的映射关系用来将容器和请求关联起来。
在这里插入图片描述

  • CoyoteAdapter:适配器,负责找到对应的容器
  • Mapper:维护者映射关系

当然这些映射关系也不是凭空出现的,只有有了相应的容器才会产生对应的映射关系。这也需要一个组件去维护。
在这里插入图片描述

  • MapperListener:监听服务,如果有新的服务,就会生成对应的映射关系

各种组件间的关系

  1. connector和container依赖于server的调用
  2. server中包含多个connector和container
  3. service实现了connector和container的功能
  4. 一个server包含了对各service,一个service包含多个connector和一个container
  5. engine属于container的一种实现
  6. 一个engine个可以维护多个context
  7. 一个context代表一个具体的项目
  8. 一个主机包含多个context
  9. 一个engine维护多个Host
  10. 一个context维护多个webServlet
  11. engine、Host、context、webServlet都是属于container
  12. container会有后台处理,30秒间隔扫描是否有新的context
  13. service通过MapperListener维护着Mapper
  14. 对于server、service、container、connector都有各自的生命周期,可以通过实现接口重写回调方法
  15. catalina是server的具体实现
  16. bootstrap是整个tomcat的入口

组件的生命周期

每一个组件都有启动、停止等生命周期方法,拥有生命周期的特征。所以定义一个通用的LifeCycle接口。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35262405/article/details/101552047
今日推荐