Tomcat工作原理

一、Tomcat架构

### 说明:

  • Server:表示整个 Tomcat Catalina servlet 容器,Server 中可以有多个 Service。(可以通过telenet 8005后连接后输入"SHUTDOWN" 注意这里是大写,来关闭服务)
  • Service:表示Connector和Engine的组合,对外提供服务,Service可以包含多个Connector和一个Engine。
  • Connector:为Tomcat Engine的连接组件,支持三种协议:HTTP/1.1、HTTP/2.0、AJP。
  • Container:负责封装和管理Servlet 处理用户的servlet请求,把socket数据封装成Request,传递给Engine来处理。
  • Engine:顶级容器,不能被其他容器包含,它接受处理连接器的所有请求,并将响应返回相应的连接器,子容器通常是 Host 或 Context。
  • Host:表示一个虚拟主机,包含主机名称和IP地址,这里默认是localhost,父容器是 Engine,子容器是 Context。
  • Context:表示一个 Web 应用程序,是 Servlet、Filter 的父容器。
  • Wrapper:表示一个 Servlet,它负责管理 Servlet 的生命周期,并提供了方便的机制使用拦截器。

架构组成-1

架构组成-2

二、Catalina结构

说明

Container包含了Engine、Host、Context、Wapper,它们不是平行关系,而是父子关系。

  • Engine:表示整个Catalina的Servlet的引擎,一个Service只能包含一个Engine
  • Host:代表一个虚拟主机或者一个站点,可以个给Tomcat配置多个虚拟主机
  • Context:代表一个web应用,一个应用可以有多个Context
  • Wapper: 代表一个Servlet


    其实在server.xml中就包含了以上的各个组件和它们之间的关系。

三、启动流程介绍

父组件启动同时调用子组件的启动方法。记载tomcat的配置文件,初始化容器组件,监听对应的端口号,准备接受客户端请求。

在tomcat,所有的功能都被抽象成组件,他们都有一个统一的接口,就是Lifecycle接口,它的核心方法有:

  • init():初始化组件
  • start():启动组件
  • stop():停止组件
  • destroy():销毁组件

个组件默认实现如下:

四、请求处理流程介绍

1、请求处理流程

tomcat是使用mapper组件,进行请求的映射。可以看成是一个多层次的map。

五、服务器配置

1、核心配置文件server.xml

是tomcat服务器的核心配置文件,包含了tomcat中servlet(Catalina)容器的全部配置。

  • Server:根标签,配置关闭端口,配置相关的监听器、全局命名和多个Service
  • Service:服务名字就是Catalina,可以配置多个连接器、一个Engine
  • Executor:配置tomcat线程池相关内容,如果配置则多个连接器使用一个,否则每个连接器使用自己的线程池
  • Connector:连接器,可以配置port、protocol、conectionTimeout、redirectProt(https)、executor、encoding
  • Engine:name、defaultHost(默认主机)、jvm(使用的虚拟机)
  • Host:name、appBase(部署路径)、unpackWARs(是否解压WAR包)、autoDeploy(是否自动部署)
  • Context:虚拟主机中的项目

结束!

相关推荐
Mahir081 天前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
RyFit1 天前
SpringAI 常见问题及解决方案大全
java·ai
石山代码1 天前
C++ 内存分区 堆区
java·开发语言·c++
绝知此事1 天前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
无风听海1 天前
C# 隐式转换深度解析
java·开发语言·c#
一只大袋鼠1 天前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
德思特1 天前
从 Dify 配置页理解 RAG 的重要参数
java·人工智能·llm·dify·rag
YOU OU1 天前
Spring IoC&DI
java·数据库·spring
один but you1 天前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
是码龙不是码农1 天前
ThreadPoolExecutor 7 个核心参数详解
java·线程池·threadpool