Tomcat源码-Tomcat架构原理

简介: Tomcat源码-Tomcat架构原理

一、Tomcat架构原理


1.Tomcat是如何绑定端口的


  我们将Tomcat是一个Web容器,也是一个Servlet容器,那么我们先来考虑第一个问题,Tomcat是如何绑定端口,并且创建对应的ServerSocket的

image.png


  绑定端口我们需要通过Connector来查看,先直接来看关键代码。

image.png


  然后进入到ProtocolHandler中查看init方法;

image.png

  然后进入到 AbstractProtocol中查看具体的实现。

image.png

然后查看Endpoint中的init方法

image.png

  进入后我们可以看到Endpoint的实现有三个,上面的截图是在Tomcat8.0.1版本中查看的,下面的截图是在Tomcat8.5版本的截图


image.png

可以看到在Tomcat8.5中已经移除了 JioEndpoint的实现了。

Endpoint实现 说明
AprEndpoint 对应的是APR模式,简单理解就是从操作系统级别解决异步IO的问题,<br />大幅度提高服务器的处理和响应性能。与本地方法库交互
JioEndpoint Java普通IO方式实现,基于ServerSocket实现,同步阻塞的IO,并发量大的情况下效率低
Nio2Endpoint 利用代码来实现异步IO
NioEndpoint 利用了JAVA的NIO实现了非阻塞IO,Tomcat默认启动是以这个来启动的


我们进入JioEndpoint中查看


image.png

image.png



2.Servlet管理


image.png

  上面我们分析了Tomcat是如何绑定端口服务的,接下来我们需要讨论下Tomcat是如何管理Servlet的,通过上面的绘图我们看到Tomcat是一个Servlet容器,我们每一个Web项目都是通过实现Servlet规范来完成相关的业务处理的。那么我们就要来看看Tomcat是如何管理我们的Web项目的。其实在server.xml文件中我们应该清楚其中的 Context标签其实代表的就是一个Web服务。


image.png


而且在官网中也有这样的描述:tomcat.apache.org/tomcat-8.5-…


A Context represents a web application. A Host may contain multiple contexts, each with a unique path. The Context interface may be implemented to create custom Contexts, but this is rarely the case because the StandardContext provides significant additional functionality.



通过上面的分析其实我们可以得到结论:


  • 一个Context标签代表了一个web项目


  • 要加载Servlet,只需要找到加载web.xml的工具类


Context标签对应的了一个Context类,Context是一个接口,默认的实现是StandardContext,在loadOnStartup中可以找到答案。


image.png

Wrapper是对Servlet的包装,增强了Servlet的应用。其中进入Wrapper的load方法中可以看到Servlet创建和init方法的执行。当然我们要看看Servlet是如何加载的,这时Servlet是配置在web.xml中的,那么web.xml的加载解析我们需要看看 ContextConfig中的处理。


image.png

里面会有一个createWebXml的方法。创建的WebXml对象其实就是对应的web.xml文件了webConfig()方法中。

image.png


image.png

进入到configureContext方法中。


image.png

到这其实我们就搞清楚了Web项目中的Servlet是如何被Tomcat来管理的了。

image.png




3.Tomcat的核心架构图


image.png

架构图中涉及到的核心组件:


顶级元素:


  • Server:是整个配置文件的根元素


  • Service:代表一个Engine元素以及一组与之相连的Connector元素


连接器


  • 代表了外部客户端发送请求到特定Service的接口;同时也是外部客户端从特定Service接收响应的接口。


容器


  容器的作用是处理Connector接收进来的请求,并产生对应的响应,Engine,Host和Context都是容器,他们不是平行关系,而是父子关系。



每个组件的作用:


  • Engine:可以处理所有请求


  • Host:可以处理发向一个特定虚拟主机的所有请求


  • Context:可以处理一个特定Web应用的所有请求


核心组件的串联关系


  当客户端请求发送过来后其实是通过这些组件相互之间配合完成了对应的操作。


  • Server元素在最顶层,代表整个Tomcat容器;一个Server元素中可以有一个或多个Service元素


  • Service在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;Connector接收请求,Engine处理请求。


  • Engine、Host和Context都是容器,且Engine包含Host,Host包含Context。每个Host组件代表Engine中的一个虚拟主机;每个Context组件代表在特定Host上运行的一个Web应用.


当客户端提交一个对应请求后相关的核心组件的处理流程如下:


image.png


当然上面还有一些其他组件:


  • Executor:线程池


  • Manger:管理器【Session管理】


  • Valve:拦截器


  • Listener:监听器


  • Realm:数据库权限


  • ....




相关文章
|
6天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
20天前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
41 3
|
23天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
56 1
|
4天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
26 3
|
1月前
|
SQL Java 数据库连接
Mybatis架构原理和机制,图文详解版,超详细!
MyBatis 是 Java 生态中非常著名的一款 ORM 框架,在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。本文详细解析了MyBatis的架构原理与机制,帮助读者全面提升对MyBatis的理解和应用能力。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Mybatis架构原理和机制,图文详解版,超详细!
|
19天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
1月前
|
开发者 容器
Flutter&鸿蒙next 布局架构原理详解
本文详细介绍了 Flutter 中的主要布局方式,包括 Row、Column、Stack、Container、ListView 和 GridView 等布局组件的架构原理及使用场景。通过了解这些布局 Widget 的基本概念、关键属性和布局原理,开发者可以更高效地构建复杂的用户界面。此外,文章还提供了布局优化技巧,帮助提升应用性能。
105 4
|
23天前
|
监控 持续交付 API
深入理解云计算中的微服务架构:原理、优势与实践
深入理解云计算中的微服务架构:原理、优势与实践
37 0
|
1月前
|
存储 Dart 前端开发
flutter鸿蒙版本mvvm架构思想原理
在Flutter中实现MVVM架构,旨在将UI与业务逻辑分离,提升代码可维护性和可读性。本文介绍了MVVM的整体架构,包括Model、View和ViewModel的职责,以及各文件的详细实现。通过`main.dart`、`CounterViewModel.dart`、`MyHomePage.dart`和`Model.dart`的具体代码,展示了如何使用Provider进行状态管理,实现数据绑定和响应式设计。MVVM架构的分离关注点、数据绑定和可维护性特点,使得开发更加高效和整洁。
163 3
|
1月前
|
API 持续交付 网络架构
深入解析微服务架构:原理、优势与实践
深入解析微服务架构:原理、优势与实践
29 0