0
点赞
收藏
分享

微信扫一扫

Tomcat进阶(一)Tomcat高级使用及其原理剖析

一葉_code 2022-01-20 阅读 50

目录

一. Tomcat 系统架构与原理剖析

(一)浏览器访问服务器的流程

(二)Tomcat 系统总体架构

1. Tomcat 请求处理⼤致过程

2. Tomcat Servlet容器处理流程

 3. Tomcat 系统总体架构

(三)Tomcat 连接器组件 Coyote

1. Coyote 简介

2. Coyote 的内部组件及流程

 (四)Tomcat Servlet 容器 Catalina

1. Tomcat 模块分层结构图及Catalina位置

 2. Servlet 容器 Catalina 的结构

3. Container 组件的具体结构

二. Tomcat 服务器核⼼配置详解

(一)主要标签结构如下:

 (二)Server 标签

​ (三)Service 标签

 (四)Executor 标签

 (五)Connector 标签

 (六)Engine 标签

 (七)Host 标签

(八)Context 标签


一. Tomcat 系统架构与原理剖析

b/s(浏览器/服务器模式) 浏览器是客户端(发送http请求) ———> 服务器端

(一)浏览器访问服务器的流程

http 请求的处理过程

 

 

注意:浏览器访问服务器使⽤的是 Http 协议, Http 是应⽤层协议,⽤于定义数据通信的格式,具体的数据传输使⽤的是 TCP/IP 协议。

(二)Tomcat 系统总体架构

1. Tomcat 请求处理⼤致过程

Tomcat 是⼀个 Http 服务器(能够接收并且处理 http 请求,所以 tomcat 是⼀个 http 服务器)

我们使⽤浏览器向某⼀个⽹站发起请求,发出的是 Http 请求,那么在远程, Http 服务器接收到这个请求之后,会调⽤具体的程序( Java 类)进⾏处理,往往不同的请求由不同的 Java 类完成处理。

 

HTTP 服务器接收到请求之后把请求交给 Servlet 容器来处理, Servlet 容器通过 Servlet 接⼝调⽤业务类。 Servlet 接⼝和 Servlet 容器这⼀整套内容叫作 Servlet 规范

注意: Tomcat 既按照 Servlet 规范的要求去实现了 Servlet 容器,同时它也具有 HTTP 服务器的功能。

Tomcat 的两个重要身份。

1 http 服务器

2 Tomcat 是⼀个 Servlet 容器

2. Tomcat Servlet容器处理流程

当⽤户请求某个 URL 资源时

1 HTTP 服务器会把请求信息使⽤ ServletRequest 对象封装起来

2 )进⼀步去调⽤ Servlet 容器中某个具体的 Servlet

3 )在 2 )中, Servlet 容器拿到请求后,根据 URL Servlet 的映射关系,找到相应的 Servlet

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

5 )接着调⽤这个具体 Servlet service ⽅法来处理请求,请求处理结果使⽤ ServletResponse 对象封装

6 )把 ServletResponse 对象返回给 HTTP 服务器, HTTP 服务器会把响应发送给客户端

 

 3. Tomcat 系统总体架构

 通过上⾯的讲解,我们发现tomcat有两个⾮常重要的功能需要完成

1 )和客户端浏览器进⾏交互,进⾏ socket 通信,将字节流和 Request/Response 等对象进⾏转换

2 Servlet 容器处理业务逻辑

Tomcat 设计了两个核⼼组件 连接器( Connector 容器( Container 来完成 Tomcat 的两⼤核⼼功能。

连接器,负责对外交流: 处理 Socket 连接,负责⽹络字节流与 Request Response 对象的转化;

容器,负责内部处理: 加载和管理 Servlet ,以及具体处理 Request 请求;

(三)Tomcat 连接器组件 Coyote

1. Coyote 简介

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

(1 Coyote 封装了底层的⽹络通信( Socket 请求及响应处理)

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

(3 Coyote Socket 输⼊转换封装为 Request 对象,进⼀步封装后交由 Catalina 容器进⾏处理,处 理请求完成后 , Catalina 通过 Coyote 提供的 Response 对象将结果写⼊输出流

(4 Coyote 负责的 是具体协议(应⽤层)和 IO (传输层)相关内容

 

Tomcat Coyote ⽀持的 IO 模型与协议

Tomcat ⽀持多种应⽤层协议和 I/O 模型,如下:

8.0 之前 , Tomcat 默认采⽤的 I/O ⽅式为 BIO ,之后改为 NIO 。 ⽆论 NIO NIO2 还是 APR , 在性能⽅⾯均优于以往的 BIO 。 如果采⽤ APR , 甚⾄可以达到 Apache HTTP Server 的影响性能。

2. Coyote 的内部组件及流程

 

 Coyote 组件及作⽤

 (四)Tomcat Servlet 容器 Catalina

1. Tomcat 模块分层结构图及Catalina位置

Tomcat 是⼀个由⼀系列可配置( conf/server.xml )的组件构成的 Web 容器,⽽ Catalina Tomcat

servlet 容器。

从另⼀个⻆度来说, Tomcat 本质上就是⼀款 Servlet 容器 , 因为 Catalina 才是 Tomcat 的核⼼ , 其他模块都是为 Catalina 提供⽀撑的。 ⽐如 : 通过 Coyote 模块提供链接通信, Jasper 模块提供 JSP 擎, Naming 提供 JNDI 服务, Juli 提供⽇志服务。

 2. Servlet 容器 Catalina 的结构

Tomcat (我们往往有⼀个认识, Tomcat 就是⼀个 Catalina 的实例,因为 Catalina Tomcat 的核⼼)

Tomcat/Catalina 实例。

 

其实,可以认为整个 Tomcat 就是⼀个 Catalina 实例, Tomcat 启动的时候会初始化这个实例, Catalina实例通过加载 server.xml 完成其他实例的创建,创建并管理⼀个 Server Server 创建并管理多个服务, 每个服务⼜可以有多个 Connector 和⼀个 Container

⼀个 Catalina 实例(容器)

⼀个 Server 实例(容器)

多个 Service 实例(容器)

每⼀个 Service 实例下可以有多个 Connector 实例和⼀个 Container 实例

  • Catalina  负责解析Tomcat的配置⽂件(server.xml , 以此来创建服务器Server组件并进⾏管理
  • Server  服务器表示整个Catalina Servlet容器以及其它组件,负责组装并启动Servlaet引擎,Tomcat连接器。Server通过实现Lifecycle接⼝,提供了⼀种优雅的启动和关闭整个系统的⽅式
  • Service  服务是Server内部的组件,⼀个Server包含多个Service。它将若⼲个Connector组件绑定到⼀个Container 。
  • Container  容器,负责处理⽤户的servlet请求,并返回对象给web⽤户的模块

3. Container 组件的具体结构

Container 组件下有⼏种具体的组件,分别是 Engine Host Context Wrapper 。这 4 种组件(容器)是⽗⼦关系。 Tomcat 通过⼀种分层的架构,使得 Servlet 容器具有很好的灵活性。

  • Engine  表示整个CatalinaServlet引擎,⽤来管理多个虚拟站点,⼀个Service最多只能有⼀个Engine但是⼀个引擎可包含多个Host 。
  • Host   代表⼀个虚拟主机,或者说⼀个站点,可以给Tomcat配置多个虚拟主机地址,⽽⼀个虚拟主机下可包含多个Context 。
  • Context  表示⼀个Web应⽤程序, ⼀个Web应⽤可包含多个Wrapper 。
  • Wrapper 表示⼀个ServletWrapper 作为容器中的最底层,不能包含⼦容器 。
  • 上述组件的配置其实就体现在conf/server.xml

二. Tomcat 服务器核⼼配置详解

(一)主要标签结构如下:

 (二)Server 标签

 

(三)Service 标签

 (四)Executor 标签

 

 (五)Connector 标签

Connector 标签⽤于创建链接器实例

默认情况下, server.xml 配置了两个链接器,⼀个⽀持 HTTP 协议,⼀个⽀持 AJP 协议

⼤多数情况下,我们并不需要新增链接器配置,只是根据需要对已有链接器进⾏优化

 

 可以使⽤共享线程池

 (六)Engine 标签

Engine 表示 Servlet 引擎

 (七)Host 标签

Host 标签⽤于配置⼀个虚拟主机

(八)Context 标签

Context 标签⽤于配置⼀个Web应⽤,如下:

 

 

 

举报

相关推荐

0 条评论