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:数据库权限


  • ....




相关文章
|
5月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
192 5
|
2月前
|
存储 监控 算法
园区导航系统技术架构实现与原理解构
本文聚焦园区导航场景中室内外定位精度不足、车辆调度路径规划低效、数据孤岛难以支撑决策等技术痛点,从架构设计到技术原理,对该系统从定位到数据中台进行技术拆解。
101 0
园区导航系统技术架构实现与原理解构
|
3月前
|
存储 消息中间件 canal
zk基础—2.架构原理和使用场景
ZooKeeper(ZK)是一个分布式协调服务,广泛应用于分布式系统中。它提供了分布式锁、元数据管理、Master选举及分布式协调等功能,适用于如Kafka、HDFS、Canal等开源分布式系统。ZK集群采用主从架构,具有顺序一致性、高性能、高可用和高并发等特点。其核心机制包括ZAB协议(保证数据一致性)、Watcher监听回调机制(实现通知功能)、以及基于临时顺序节点的分布式锁实现。ZK适合小规模集群部署,主要用于读多写少的场景。
|
4月前
|
存储 人工智能 自然语言处理
为什么混合专家模型(MoE)如此高效:从架构原理到技术实现全解析
本文深入探讨了混合专家(MoE)架构在大型语言模型中的应用与技术原理。MoE通过稀疏激活机制,在保持模型高效性的同时实现参数规模的大幅扩展,已成为LLM发展的关键趋势。文章分析了MoE的核心组件,包括专家网络与路由机制,并对比了密集与稀疏MoE的特点。同时,详细介绍了Mixtral、Grok、DBRX和DeepSeek等代表性模型的技术特点及创新。MoE不仅解决了传统模型扩展成本高昂的问题,还展现出专业化与适应性强的优势,未来有望推动AI工具更广泛的应用。
1695 4
为什么混合专家模型(MoE)如此高效:从架构原理到技术实现全解析
|
2月前
|
运维 安全 数据可视化
采用PHP+Vue技术架构的不良事件管理系统(源码)
本系统为医院安全(不良)事件管理工具,支持快速上报、流程化处理与多维度分析,助力识别风险、优化管理。采用PHP+Vue技术架构,功能涵盖事件上报、追踪整改、数据统计及PDCA改进等。
113 0
|
4月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
134 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
|
4月前
|
Java 开发者 Spring
Spring框架 - 深度揭秘Spring框架的基础架构与工作原理
所以,当你进入这个Spring的世界,看似一片混乱,但细看之下,你会发现这里有个牢固的结构支撑,一切皆有可能。不论你要建设的是一座宏大的城堡,还是个小巧的花园,只要你的工具箱里有Spring,你就能轻松搞定。
199 9
|
5月前
|
人工智能 自然语言处理 安全
基于LlamaIndex实现CodeAct Agent:代码执行工作流的技术架构与原理
CodeAct是一种先进的AI辅助系统范式,深度融合自然语言处理与代码执行能力。通过自定义代码执行代理,开发者可精准控制代码生成、执行及管理流程。本文基于LlamaIndex框架构建CodeAct Agent,解析其技术架构,包括代码执行环境、工作流定义系统、提示工程机制和状态管理系统。同时探讨安全性考量及应用场景,如软件开发、数据科学和教育领域。未来发展方向涵盖更精细的代码生成、多语言支持及更强的安全隔离机制,推动AI辅助编程边界拓展。
261 3
基于LlamaIndex实现CodeAct Agent:代码执行工作流的技术架构与原理
|
Java 应用服务中间件 Maven
怎么读 Tomcat 源码?
上次分享了一篇关于 Tomcat 的文章《写一款 Tomcat 也没有那么难》,真有读者去下载了 Tomcat 的源码来研读,但搞了很久也没有把它在 IDEA 的开发环境给成功跑起来。
221 0
怎么读 Tomcat 源码?