随笔 - 24  文章 - 0 评论 - 0 阅读 - 6447
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

1. Tomcat系统架构

  1.1 Tomcat请求处理大致过程

  Tomcat是一个Http服务器(能够接收并且处理http请求),当使用浏览器发起请求,发出的是http请求,http服务器接收到这个请求之后,会调用具体的程序(java类)进行处理,不同的请求由不同的java类完成处理。

 

 http服务器接收到请求之后把请求交给servlet容器来处理,容器通过servlet接口调用业务类,servlet接口和servlet容器这一整套内容叫做servlet规范。

Tomcat按照servlet规范的要求实现了servlet容器,同时它具有http服务器的功能。

 1.2 处理流程

用户请求URL资源时,有以下过程。

 

1)http服务器会把请求信息使用ServletRequest对象封装起来。

2)进一步调用servlet容器中某个具体的servlet

3)servlet容器拿到请求后,根据url和servlet的映射关系,找到具体的servlet

4)如果servlet还没有被加载,就用反射机制创建这个servlet,并调用servlet的init方法来完成初始化

5)接着调用这个具体的servlet的service方法来处理请求,请求处理结果使用servletResponse对象封装

6)把这个对象返回给http服务器,然后把响应发送给客户端

1.3 总体架构

 

 tomcat两大核心组件连接器和容器。连接器负责处理socket连接,负责网络字节流与request和response对象的转化,容器负责加载和管理servlet,处理具体request请求。

2. tomcat连接器组件Coyote

2.1 简介

Coyote是tomcat中连接器的组件名称,是对外的接口,客户端通过Coyote与服务器建立连接、发送请求并接受响应。

1)封装了底层的网络通信(socket请求及响应处理)

2)使Catalina容器(容器组件)与具体的请求协议及IO操作方式完全解耦

3)将socket输入转化封装为request对象,进一步交由Catalina容器进行处理,处理请求完成后,Catalina通过Coyote提供的response对象将结果写入输出流。

4)负责具体协议(应用层)和IO(传输层)相关内容

 支持的IO模型与协议如下图所示:

 

 默认的协议的http/1.1,8.0之后默认的IO模型是NIO,之前是BIO。

2.2  Coyote的内部组件及流程

 

 

 

 

3. Tomcat Servlet容器 Catalina

tomcat是由一系列可配置(conf/server.xml)的组件构成的web容器,而Catalina是tomcat的servlet容器。

 

 通过coyote模块提供连接通信,Jasper模块提供jsp引擎,naming提供jndi服务,juli提供日志服务。

tomcat本质上是servlet容器,Catalina是tomcat的核心,其他模块都是为Catalina提供支撑的。

 

可以认为 tomcat是一个Catalina实例。tomcat启动时会初始化这个实例。

 Catalina:负责解析tomcat的配置文件(server.xml),以此来创建服务器server组件并进行管理

 server:表示整个Catalina servlet容器及其他组件,负责组装并启动servlet引擎,tomcat连接器,server通过实现LifeCycle接口,提供了一种优雅的启动和关闭整个系统的方式。

service:server内部的组件,一个server包含多个service,将若干个connector组件绑定到一个container

container:负责处理用户的servlet请求,并返回对象给web用户模块。

engine:整个Catalina的servlet引擎,管理多个模拟站点,一个service最多只有一个engine

host:代表虚拟主机,或者说一个站点,可以给tomcat配置多个虚拟主机地址

context:表示一个web应用程序

wrapper:表示一个servlet,wrapper作为 容器的最底层,不能包含子容器。

4. 核心配置

核心配置在tomcat目录下conf/server.xml文件。

主要标签如下:

 

 server标签:

 

 

 

 service标签

 

 Executor标签

 

 connector标签:

用于创建连接器的实例,配置了两个连接器,一个支持http协议,一个支持ajp协议,默认情况下不需要新增连接器配置,只是根据对已有的连接器进行优化。

 

 Engine标签:表示servlet引擎。

 

 Host标签:用于配置一个虚拟主机

 

posted on   jeolyli  阅读(61)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示