【Tomcat专题】简单认识一下Tomcat总体架构

article/2025/9/20 1:59:45

文章目录

  • 什么是Tomcat?
  • Tomcat的主要工作
  • Tomcat总体架构
    • 连接器
    • 容器
  • 请求定位流程

什么是Tomcat?

在Tomcat官方网站上是这样介绍的。

  • The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These specifications are part of the Jakarta EE platform.

  • The Jakarta EE platform is the evolution of the Java EE platform. Tomcat 10 and later implement specifications developed as part of Jakarta EE. Tomcat 9 and earlier implement specifications developed as part of Java EE.

简单点来说,Tomcat就是一个开源的,支持了Servlet等规范的Wer应用服务器,相对于JBoss或者WebLogic,它不包含EJB容器,对于CPU和内存的消耗也更小,应用部署和启动更简单,是一种轻量级的应用服务器。

Tomcat的主要工作

Tomcat可以理解为就是“HTTP服务器 + Servlet容器”,主要有两个核心的功能:

  1. 要解决浏览器与服务器之间的数据传输问题,所以需要管理Socket连接,负责网络信息流的处理
  2. 要遵循Servlet规范,加载和管理Servlet,以及处理Request和返回Reponse。

Tomcat总体架构

为了实现HTTP服务器+Servlet容器这两个核心的功能,Tomcat设计了Connector和Container两个组件来分别完成这两件事情,Connector负责HTTP服务器部分,Container负责容器内部处理。

连接器

既然Connector是负责HTTP服务器部分,那就要思考HTTP服务器最核心的功能到底有哪些,首先应该要有最基本的接受网络连接、读写网络数据流、协议解析,因此Tomcat也设计了相关的组件来分别对应上面的功能,他们分别是Endpoint,负责管理网络连接,Processor,负责协议解析,他们之间的关系是Endpoint负责接受网络连接并将网络中接收的数据流给到Processor,Processor负责解析协议,并将数据封装成Tomcat自己的Request、Response对象。

当然为了最终能够适配Servlet规范,Tomcat还设计了Adapter类,专门用于将TomcatRequest/Response转换成ServletRequest/ServletResponse。

所以我们梳理下他们的关系大致如下图所示

在这里插入图片描述

容器

连接器部分了解后,接下来就是容器了,Tomcat设计了4种容器,分别为:Engine、Host、Context和Wrapper,他们之间是一种父子关系,这一点实际上我们通过Tomcat的server.xml配置文件也能看得出来。

Engine表示引擎,是每个请求的入口点,用于分析处理请求中包含的HTTP头部信息,并将其传递给合适的虚拟主机,一个Service最多只能有一个Engine。

Host就表示一个虚拟主机,一个Tomcat可以配置多个虚拟主机,一个虚拟主机又可以配置多个Web应用程序。

Context表示一个Web应用程序。

Wrapper表示一个Servlet。

在这里插入图片描述

请求定位流程

所以根据Tomcat架构设计来看,总体请求流程应该是这样的:

  1. 首先我们知道默认不修改的Service的情况下,Tomcat默认会监听8080端口,并按照HTTP协议对请求进行解析,这主要由连接器中的各个组件来完成。
  2. 当确认连接器之后,也就确认了容器中的Service和Engine。
  3. 接下来,通过解析URL中的域名,就可以找到相应的Host。
  4. 再通过URL中的路径,又可以找到相应的Context。
  5. 最后根据web.xml中配置的Servlet映射路径找到具体的Wrapper。

http://chatgpt.dhexx.cn/article/nRQ89dKb.shtml

相关文章

四张图带你了解Tomcat系统架构--让面试官颤抖的Tomcat回答系列!

俗话说,站在巨人的肩膀上看世界,一般学习的时候也是先总览一下整体,然后逐个部分个个击破,最后形成思路,了解具体细节,Tomcat的结构很复杂,但是 Tomcat 非常的模块化,找到了 Tomcat最…

Tomcat常见面试题

1、tomcat有哪些组件? 2、tomcat有哪些Connector? http ajp 3、tomcat的Valve的作用是什么? 给每一个虚拟主机定义访问日志 4、servlet的生命周期? Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过…

【金三银四】Tomcat面试题(2021最新版)

目录 前言 1、Tomcat的缺省端口是多少,怎么修改? 2、tomcat 有哪几种Connector 运行模式(优化)? 3、Tomcat有几种部署方式? 4、tomcat容器是如何创建servlet类实例?用到了什么原理? 5.tomcat 如何优化…

Tomcat面试题(2020最新版)

文章目录 Tomcat是什么?Tomcat的缺省端口是多少,怎么修改tomcat 有哪几种Connector 运行模式(优化)?Tomcat有几种部署方式?tomcat容器是如何创建servlet类实例?用到了什么原理?Tomcat工作模式Tomcat顶层架构…

「面试必背」Tomcat面试题(收藏)

「面试必背」Tomcat面试题(建议收藏) 2022-04-27 16:31java柚子茶 前言 在工作中,作为 Java 开发的程序员,Tomcat 服务器是大家常用的,也是很多公司现在正在用的。但是,在系统并发量比较大的情况下&…

Tomcat面试题(总结最全面的面试题)

Tomcat是什么? Tomcat 服务器Apache软件基金会项目中的一个核心项目,是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首…

【面试】Tomcat面试题

文章目录 Tomcat是什么?Tomcat的缺省端口是多少,怎么修改怎么在Linux上安装Tomcat怎么在Linux部署项目Tomcat的目录结构类似Tomcat,发布jsp运行的web服务器还有那些:tomcat 如何优化?tomcat 有哪几种Connector 运行模式…

Linux面试问题---常用命令

Linux面试问题---常用命令 1、cd命令 用于切换当前目录,参数是要切换到的目录的路径。 Cd /root/Documents #切换到/root/Documents目录Cd ./path 切换到当前目录下的path目录 Cd ../path 切换到上层目录下的path目录 2、ls命令 查看文件与目录的命令 3、grep…

Linux命令面试突击

Linux 命令常见面试题总结。 其它面试知识点突击整理: 序号文章1Java基础面试突击2JVM面试突击3设计模式面试突击4并发编程面试突击5消息队列Kafka面试突击6Redis面试突击7计算机网络面试突击8Spring面试突击9Dubbo面试突击10MyBatis面试突击11操作系统面试突击12…

Linux面试题(2020最新版)

Java面试总结(2021优化版)已发布在个人微信公众号【技术人成长之路】,优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结,删除了低频问题,添加了一些常见面试题,对文章进行了…

Linux面试问题

grep和find的区别? 所以简单点说说,grep是查找匹配条件的行,find是搜索匹配条件的文件。 find /dir -name filename grep的使用干货: ls -l | grep ^a 通过管道过滤ls -l输出的内容,只显示以a开头的行。 grep test…

Linux面试总结

一.常用命令 1.目录切换 cd / 切换到根目录 cd ../ 切换到上级目录 cd ~ 切换到home目录 2.查看目录 ls 列出当前目录下所有的文件 ls [路径] ls / 查看根目录 ls -l 相当于 ll 最常用的命令,用了表的方式列出当前目录的内容 3.查看当前目录 pwd- 4.创建一组空文件 touch 5.显…

Linux面试相关知识点看着一文就够了

今天和大家分享一下linux操作系统下主要用到的几个知识点,分别是:linux目录结构、linux常用命令、文件权限操作、服务操作、yum安装命令、docker服务、vim编译器、pymysql测试连接、用户及组命令、mysql创建用户和数据库 目录 一、linux目录结构 二、l…

面试要求 熟悉linux系统,Linux面试中最常问的10个问题总结

前言 如果你要去面试一个linux系统运维工程师的职位,下面这十个最常见的问题一定要会,否则你的面试可能就危险了。这些都是比较基本的问题,大家要理解,不能光死记硬背。 1、如何查看系统内核的版本 这里有两种方法: 1) uname -a uname 这个命令是用来打印系统信息的, -a …

「面试必背」Linux面试题(2022最新版)

作为 Java 的从业者,在找工作的时候,一定会被问及关于Linux 相关的知识。Linux知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。在这里我们将详细的整理常见的Linux面试题目, 提供给大家学习参考。 1. 什么…

Linux面试题(总结最全面的面试题)

Linux 概述 什么是Linux Linux是一套免费使用和自由传播的类似Unix操作系统,一般的WEB项目都是部署都是放在Linux操作系统上面。 Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支…

2022(招聘季)linux面试高频题

大家好,今天给大家分享一下2022最新最全的linux面试高频题,希望你们喜欢。 linux运维工程师在面试的时候经常会被问到各种问题,接下来我也会根据自己的经验将面试题整理下来供大家参考。有不同见解的欢迎打扰!!&#x…

嵌入式linux 面试题

嵌入式linux开机启动流程 上电–>固化boot–>uboot–>kernel–>file system–>app uboot一般不使用mmu uboot cmdline–>kernel 新版本kernel 设备树,代替platform文件 linux特殊进程 idle进程(PID 0), init进程(PID 1)和kthreadd(PID 2…

Linux面试题总结(一)

Linux基本面试问题 1. 什么是Linux: Linux是基于Linux内核的操作系统。它是一个开源操作系统,可以在不同的硬件平台上运行。它为用户提供了免费的低成本操作系统。这是一个用户友好的环境,他们可以在其中轻松修改和创建源代码的变体。 2. 谁发明Linux?…

【2022最新Java面试宝典】—— Linux面试题(50道含答案)

目录 一、Linux 概述1. 什么是Linux2. Windows和Linux的区别3. Unix和Linux有什么区别?4. 什么是 Linux 内核?5. Linux的基本组件是什么?6. Linux 的体系结构7. BASH和DOS之间的基本区别是什么?8. Linux 开机启动过程?…