【专栏目录】
Tomcat底层原理分析:1.基础环境搭建
Tomcat底层原理分析:2.Tomcat架构分析
Tomcat底层原理分析:3.Jasper引擎
Tomcat底层原理分析:4.Tomcatd的server.xml配置内容解析
Tomcat底层原理分析:5.Web应用配置解析
Tomcat底层原理分析:6.Tomcat中对JVM的配置解析
Tomcat底层原理分析:7.Tomcat集群配置解析
Tomcat底层原理分析:8.Tomcat安全性配置解析
Tomcat底层原理分析:9.Tomcat性能调优
【本文导读】
本文主要讲了Tomcat的各个组件之间的关系以及Tomcat底层是如何实现“一个URL定位到一个具体的servlet”。
注:本文图片均来自java进阶教程动手实现Tomcat【黑马程序员精品公开课】,侵权立删。
1.Tomcat整体架构
Tomcat本质上就是一个Servlet容器,所以Catalina就是其核心,其他模块都是为Catalina提供支撑的。比如:通过Coyote提供Sockets通信,Jasper提供JSP引擎,Naming提供JNDI服务,Juli提供日志服务。
【Tomcat分层示意图】
【Tomcat架构图】
【Tomcat主要核心逻辑简图】
【Servlet内部逻辑简图】
2.容器-Catalina
2.1Catalina组件
【Catalina容器架构图】
组件 | 职责 |
---|---|
Catalina | 负责解析Tomcat的配置文件,以此来创建Server组件,并根据命令对其进行管理 |
Server | 表示整个Servlet容器和其他组件,负责组装并启动Servlet引擎、Tomcat连接器。Server通过实现LifeCycle接口,提供了一种优雅的启动和关闭整个系统的方式。 |
Service | 一个Server包含多个Service,它是“若干个Connector”和“一个Container”的组合。 |
Connector | 处理与客户端的通信,负责接收客户端的请求,并转发给Container处理,最后再将Container的处理结果返回给客户端 |
Container | 又叫Servlet容器,也叫Servlet引擎,负责处理Connector转发来的请求,并返回处理结果给Connector |
2.2Container容器组件
【Container容器组件架构图】
组件 | 职责 |
---|---|
Engine | 表示整个Catalina的Servlet引擎,即代表Container。用来管理多个虚拟站点,一个Service最多只能有一个Engine,一个Engine可以有多个Host。 |
Host | 代表一个虚拟主机,即一个站点。一个Engine可以有多个Host,一个Host有可以有多个Context。 |
Context | 代表一个Web应用,一个Context可以包含多个Wrapper。 |
Wrapper | 代表一个Servlet,Wrapper是最底层的基础单位。 |
2.3Tomcat的server.xml结构
结合server.xml文件结构看,更容易理解Container容器中组件的结构
<Server>
<Service>
<Connector></Connector>
<Connector></Connector>
<Engine>
<Host>
<Context></Context>
<Context></Context>
</Host>
</Engine>
</Service>
</Server>
3.连接器-Coyote
3.1框架介绍
【连接池和容器的交互过程】
- Coyote的工作是将Socket的输入输出转换为Request和Response对象,并把Request和Response通过适配器转换成ServletRequest和ServletResponse,用来转发给/接受于Catalina容器
- Coyote封装底层网络通信,为Catalina容器提供一套API,使Catalina容器与具体的请求协议以及IO操作方式完全解耦
3.2Tomcat支持的IO模型和协议
【可以略过】
3.3连接器组件
【组件架构图】
- EndPoint组件用于解析HTTP包中的传输层内容
- Processor组件用于解析HTTP包中的应用层内容
- 二者由ProtocolHandler组件管理
- Processor将HTTP请求封装成Request对象
- 再由Adapter转换成ServletRequest对象,转发给Catalina容器
4.Tomcat启动流程
一句话总结:整个启动流程做的事情就是加载Tomcat的配置文件,初始化容器组件,监听对应端口号,准备接受客户端请求。
5.Tomcat请求处理流程
客户端浏览器发起对Tomcat发起一个请求,该请求是如何定位到当前Tomcat下的哪个项目的哪个Servlet的过程以及处理该请求的过程就叫做Tomcat请求处理流程。
那么如何定位到的呢?答案是:Tomcat使用Mapper组件。
Mapper组件的功能:将用户请求的URL定位到一个Servlet;
Mapper组件的原理:Mapper组件里保存了Web应用的配置信息,其实就是容器组件与访问路径的映射关系,比如Host容器里配置的域名、Context容器里的Web应用路径,以及Wrapper容器里的Servlet映射的路径,可以将其想象成一个多层次的Map。
由于Mapper的原理,一个URL只会映射到一个Servlet。
【Mapper组件定位Servlet过程示例图】