您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Tomcat 系统架构与原理剖析

时间:2020-08-04 11:59:44  来源:  作者:

1. 浏览器访问服务器的流程

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

Tomcat 系统架构与原理剖析

 

2. Tomcat 系统总体架构

Tomcat是一个 Http服务器 (能够接受并且处理 http 请求,所以 Tomcat 是一个 Http服务器 )。

2.1. Tomcat 处理请求大致流程

Tomcat 系统架构与原理剖析

 

HTTP服务器接收到请求之后把请求交给 Servlet容器 来处理, Servlet容器 通过 Servlet接⼝ 调⽤业务类。

Servlet接⼝和 Servlet容器 这⼀整套内容叫作 Servlet规范 。

Servlet容器有解耦的作用,避免 Http服务器 和 业务类 的直接耦合。

由于 Tomcat 根据 Servlet规范 实现了 Servlet容器 ,同时它又具有 Http服务器 的功能,所以 Tomcat 拥有两个重要身份:

  • Servlet容器
  • Http服务器

2.2. Tomcat Servlet容器处理流程

Tomcat 系统架构与原理剖析

 

当用户请求某个URL资源时:

  • 1) Http服务器 会把请求信息封装成 Request对象 ,再转化成 ServletRequest对象 ,传入 Servlet容器 ;
  • 2) Servlet容器 接收到请求后,根据 URL 和 Servlet 的映射关系(必要的配置信息),找到对应的 Servlet ;
  • 3) 如果 Servlet 还没有被加载,使用 反射技术 创建该 Servlet ,并调用 Servlet 的 init 方法来完成初始化;
  • 4) 调用 Servlet 的 service 方法处理请求,将请求处理结果封装成 ServletResponse 对象,返回给 Http服务器 ;
  • 5) Http服务器 将接收到的 ServletResponse对象 转化成 Response对象 ,返回给客户端。

2.3. Tomcat 系统总体架构

Tomcat 系统架构与原理剖析

 

Tomcat设计了两个核心组件 连接器(Connector) 和 容器(Container) 来完成 Tomcat 的两大核心功能:

  • 连接器:负责对外交流 ,处理Socket连接,负责 网络字节流 和 Request/Response 对象的转化;
  • 容器:负责内部处理 ,加载和管理Servlet,以及具体请求的处理。

3. Tomcat 连接器组件 Coyote

3.1. Coyote简介

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

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

  • Coyote 封装了底层的网络通信(Socket请求及响应处理)
  • Coyote 使 Catalina容器(容器组件) 与具体的 请求协议 和 IO操作方式 完全解耦
  • Coyote 将 Socket 输入转化封装为 Request对象 ,进一步交给 Catalina容器 处理,处理完成后, Catalina容器 通过 Coyote 提供的 Response对象 将结果写入输出流
Tomcat 系统架构与原理剖析

 

Tomcat (Coyote)支持多种应用层协议和I/O模型:

Tomcat 系统架构与原理剖析

 

在 8.0 版本之前, Tomcat 默认采用的 I/O模型 是 BIO , 8.0 版本之后,改为 NIO 。

3.2. Coyote内部组件及流程

Tomcat 系统架构与原理剖析

 

Coyote内部各组件的作用:

组件作用EndPointEndPoint 是 Coyote 的通信端点,即通信监听的接口,是具体 Socket 接收和发送的处理器,是对 传输层的抽象 。因此 EndPoint 用来实现 TCP/IP协议ProcessorProcessor 是 Coyote 的协议处理接口,用来实现 HTTP协议 , Processor 接收来⾃ EndPoint 的 Socket ,读取字节流解析成 Tomcat Request 和 Response对象 ,并通过 Adapter 将其提交到容器处理, Processor 是对应⽤层协议的抽象ProtocolHandlerCoyote 协议接⼝,通过 Endpoint 和 Processor , 实现针对具体协议的处理能⼒。 Tomcat 按照协议和I/O 提供了6个实现类 : AjpNioProtocol , AjpAprProtocol , AjpNio2Protocol , Http11NioProtocol , Http11Nio2Protocol , Http11AprProtocolAdapterCoyoteAdapter 负责将 Tomcat Request 转成 ServletRequest ,再调⽤容器

4. Tomcat Servlet 容器 Catalina

4.1. Tomcat模块分层结构图和Catalina的地位

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

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

Tomcat 系统架构与原理剖析

 

4.2. Servlet 容器 Catalina 的结构

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

Tomcat/Catalina实例:

Tomcat 系统架构与原理剖析

 

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

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

4.3. Container组件的具体结构

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

  • Engine表示整个Catalina的Servlet引擎,⽤来管理多个虚拟站点,⼀个Service最多只能有⼀个Engine,但是⼀个引擎可包含多个Host
  • Host代表⼀个虚拟主机,或者说⼀个站点,可以给Tomcat配置多个虚拟主机地址,⽽⼀个虚拟主机下可包含多个Context
  • Context表示⼀个Web应⽤程序, ⼀个Web应⽤可包含多个Wrapper
  • Wrapper表示⼀个Servlet,Wrapper 作为容器中的最底层,不能包含⼦容器


Tags:Tomcat   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1. 整体架构简析#如果将Tomca它的结构高度抽象的话,那么Tomcat其实可以看成只是有连接器(Connector)和容器(Container)两个组件构成。其中Connector组件负责在服务器端处理客户端...【详细内容】
2021-09-30  Tags: Tomcat  点击:(53)  评论:(0)  加入收藏
开源的 Java Web 应用服务器,实现了 Java EE(Java Platform Enterprise Edition)的部 分技术规范,比如 Java Servlet、Java Server Page、JSTL、Java WebSocket。Java EE 是 S...【详细内容】
2021-09-17  Tags: Tomcat  点击:(68)  评论:(0)  加入收藏
一、前言server.xml 配置,是 Tomcat启动配置,从配置结构可以看出 Tomcat 的整体架构。如果能够了解其常用配置项,对 Tomcat有一个高屋建瓴的把握,然后再庖丁解牛,一步步深入源码...【详细内容】
2021-07-04  Tags: Tomcat  点击:(86)  评论:(0)  加入收藏
一,undertow介绍 1,undertow简介:Undertow是RedHAT红帽公司开源的产品,采用java开发,是一款灵活,高性能的web服务器,提供了NIO的阻塞/非阻塞API,也是Wildfly的默认Web容器。在javaw...【详细内容】
2021-05-07  Tags: Tomcat  点击:(184)  评论:(0)  加入收藏
说明最近项目上遇到一些https的问题,需要在tomcat里面测试一下如何开启https协议访问网站,在网上查了一些资料,自己也试了很多次,终于成功搞定了,下面跟大家分享一下我的一点经验...【详细内容】
2021-04-20  Tags: Tomcat  点击:(162)  评论:(0)  加入收藏
1 Jetty与glassfish的基本介绍1.1 研究背景及意义下图是对几个主流的应用服务器使用比率的粗率统计结果做出的一个饼图。这个图的数据也许不够精确,但它还是可以在一定程度上...【详细内容】
2021-04-06  Tags: Tomcat  点击:(199)  评论:(0)  加入收藏
Tomcat是什么?Tomcat是web容器。你在做web项目时,多数需要http协议,也就是基于请求和响应,比如你在百度输入一行内容搜索,那么百度服务器如何处理这个请求呢,他需要创建servlet来...【详细内容】
2021-03-24  Tags: Tomcat  点击:(290)  评论:(0)  加入收藏
有这样一个场景,公司为了安全起见,需要对所有登录Linux服务器做安全限制,要求除了管理员其他要登录linux服务器的员工不能用最高权限账号登录,要创建新的用户,对目录及文件权限做...【详细内容】
2021-03-04  Tags: Tomcat  点击:(178)  评论:(0)  加入收藏
热部署就是在服务器运行时重新部署项目,热加载即在在运行时重新加载class,从而升级应用。通常情况下在开发环境中我们使用的是热加载,因为热加载的实现的方式在Web容器中启动一...【详细内容】
2021-03-03  Tags: Tomcat  点击:(210)  评论:(0)  加入收藏
制作tomcat镜像先找到一个要安装的版本我们这里以拉取tomcat8的官方镜像为例 1:拉取官方镜像docker pull tomcat:8 2:查看镜像并启动tomcat容器docker imagesdocker run -d -p...【详细内容】
2021-03-01  Tags: Tomcat  点击:(323)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(8)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条