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:虚拟主机中的项目

结束!

相关推荐
跳动的梦想家h1 小时前
黑马点评 秒杀下单出现的问题:服务器异常---java.lang.NullPointerException: null(已解决)
java·开发语言·redis
苹果醋31 小时前
前端面试之九阴真经
java·运维·spring boot·mysql·nginx
哎呦没1 小时前
Spring Boot OA:企业办公自动化的高效路径
java·spring boot·后端
真心喜欢你吖1 小时前
Spring Boot与MyBatis-Plus的高效集成
java·spring boot·后端·spring·mybatis
2402_857589361 小时前
企业办公自动化:Spring Boot OA管理系统开发与实践
java·spring boot·后端
G丶AEOM2 小时前
JVM逃逸分析机制
java·jvm
无聊写博客2 小时前
JDK、JRE、JVM的区别
java·开发语言·jvm
message丶小和尚2 小时前
SpringBoot升级全纪录之项目启动
java·spring boot·mybatis
Allen Bright3 小时前
IDEA配置本地maven
java·maven·intellij-idea
总是学不会.3 小时前
【贪心算法】绿洲之旅:最少次数补给探索
java·算法·intellij-idea