Tomcat体系结构与运行流程

Servlet 体系原理与 Tomcat 执行流程 在 Java Web 开发体系中,Servlet 是处理 HTTP 请求的核心组件,而 Tomcat 作为主流的 Servlet 容器,承担着请求接收、解析、分发及响应返回的全流程管理。本文将从 Servlet 的核心体系原理入手,结合 Tomcat 的完整执行流程(含阻塞 / 非阻塞 I/O 模型),全方位拆解二者的协作逻辑与底层实现。Servlet 并非单一类,而是一套由「接口 - 抽象类 - 自定义实现」构成的分层体系,其设计核心是规范 Web 组件的生命周期,同时降低开发者的编码成本。 阅读详情

Tomcat架构

Tomcat 体系结构中的六个主要概念:

Server

Service

Engine

Host

Connector

Context





  • Server(服务器)是Tomcat构成的顶级构成元素,所有一切均包含在Server中,Server的实现类StandardServer可以包含一个到多个Services;还可以包含一个GlobalNamingResources。
  • 次顶级元素Service的实现类为StandardService调用了容器(Container)接口,其实是调用了Servlet Engine(引擎),而且StandardService类中也指明了该Service归属的Server;Service中可以含有一个或多个Connector,但只能含有一个Engine。这使得不同的Connector可以共享同一个Engine。同一个Server中的多个Service之间没有相关性。
  • Engine负责接收和处理来自它所属的Service中的所有Connector的请求。

  • Host表示一个虚拟主机,并和一个服务器的网络名关联。注意Engine中必须有一个Host的名字和Engine的defaultHost属性匹配。
  • 连接器(Connector)将Service和Container连接起来,Connector负责接收来自客户端(Client)的请求转发到Container(容器)。比较常见的两个是HTTP Connector和AJP Connector。 

  • Context表示在虚拟主机中运行的web应用程序。一个虚拟主机中能够运行多个Context,它们通过各自的Context Path进行相互区分。如果Context Path为"",那么该web应用为该虚拟主机的默认的web应用。

故我们从功能的角度将Tomcat源代码分成5个子模块,它们分别是:

  1. Jsper子模块:这个子模块负责jsp页面的解析、jsp属性的验证,同时也负责将jsp页面动态转换为java代码并编译成class文件。在Tomcat源代码中,凡是属于org.apache.jasper包及其子包中的源代码都属于这个子模块;
  2. Servlet和Jsp规范的实现模块:这个子模块的源代码属于javax.servlet包及其子包,如我们非常熟悉的javax.servlet.Servlet接口、javax.servet.http.HttpServlet类及javax.servlet.jsp.HttpJspPage就位于这个子模块中;
  3. Catalina子模块:这个子模块包含了所有以org.apache.catalina开头的java源代码。该子模块的任务是规范了Tomcat的总体架构,定义了Server、Service、Host、Connector、Context、Session及Cluster等关键组件及这些组件的实现,这个子模块大量运用了Composite设计模式。同时也规范了Catalina的启动及停止等事件的执行流程。从代码阅读的角度看,这个子模块应该是我们阅读和学习的重点。
  4. Connectors子模块:如果说上面三个子模块实现了Tomcat应用服务器的话,那么这个子模块就是Web服务器的实现。所谓连接器(Connector)就是一个连接客户和应用服务器的桥梁,它接收用户的请求,并把用户请求包装成标准的Http请求(包含协议名称,请求头Head,请求方法是Get还是Post等等)。同时,这个子模块还按照标准的Http协议,负责给客户端发送响应页面,比如在请求页面未发现时,connector就会给客户端浏览器发送标准的Http 404错误响应页面。
  5. Resource子模块:这个子模块包含一些资源文件,如Server.xml及Web.xml配置文件。严格说来,这个子模块不包含java源代码,但是它还是Tomcat编译运行所必需的。

 Tomcat运行流程

假设来自客户的请求为:http://localhost:8080/test/index.jsp

  1. 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
  2. Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应
  3. Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host
  4. Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
  5. localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
  6. Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
  7. path="/test"的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
  8. Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
  9. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
  10. Context把执行完了之后的HttpServletResponse对象返回给Host
  11. Host把HttpServletResponse对象返回给Engine
  12. Engine把HttpServletResponse对象返回给Connector
  13. Connector把HttpServletResponse对象返回给客户browser 
基于4G cat.1的低功耗车牌识别摄像头模组介绍 在消费类摄像头领域,4G低功耗相机已经非常普遍,在可视门锁,婴儿看护,户外监控等领域都获得了很好的应用.但是在工业领域,低功耗相机的应用还不是那么广泛.这里要介绍一款基于4G cat.1的低功耗车牌识别摄像头模组,在待机状态只有MCU和毫米波雷达以1Hz的频率工作,功耗低至500uA,并可以通过4G模块远程唤醒模组. 阅读详情

相关推荐

Python+QMT量化交易实战:从零搭建你的第一个极速策略(附完整代码)

本文提供了一份详细的Python+QMT量化交易实战指南,手把手教你从零搭建一个可回测、可实盘的极速策略。内容涵盖环境配置、QMT核心机制解析、双均线策略的完整代码实现、回测优化方法以及实盘部署要点,帮助量化交易新手快速入门并掌握核心开发流程。

b9c0d的博客 1012

Tomcat体系结构

前言:    1.作为Java开发人员,大多都对Tomcat不陌生,由Apache基金会提供技术支持与维护,因为其免费开源且易用,作为Web服务器深受市场欢迎,所以有必要对其进行深入的研究,本系列皆以Tomcat 8.5为研究课题,下载地址:https://tomcat.apache.org/download-80.cgi如下图,为Apache Tomcat 8.5.24的二进制文件分布情况:这其...

lzf的博客 787

Ubuntu24.04LTS上Ollama GPU加速配置指南:从驱动安装到多卡均衡负载

本文详细介绍了在Ubuntu24.04LTS系统上配置Ollama GPU加速的完整指南,包括NVIDIA驱动安装、CUDA Toolkit配置、Ollama在线与离线安装方法,以及多GPU负载均衡优化策略。通过实战案例和性能调优建议,帮助开发者充分利用硬件资源提升大型语言模型的运行效率。

weixin_29255731的博客 760

【Tomcat 体系结构介绍】

Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。   顶级组件:Server 服务类:Service 连接器:http, https, ajp(apache jserv protocol) 容器类:Engine, Host, Context 被嵌套的组件:val...

305

实战二:基于LightGBM进行海洋轨迹预测 代码+数据(非常详细可作为毕设)

实战二:基于LightGBM进行海洋轨迹预测 代码+数据(非常详细可作为毕设)

1315

如何通过 Python 爬虫抓取并分析政府开放数据

通过本文的介绍,我们展示了如何使用Python 爬虫抓取并分析政府开放数据。通过requests获取政府开放数据的 API 接口数据。使用和pandas进行数据清洗与存储。使用matplotlib对数据进行可视化。你可以根据不同的政府开放平台和数据集进行调整,应用于不同领域的数据分析,如公共健康、交通、环保等。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1077

JavaEE--------Apache WEB服务器

一. Apache和Tomcat的区别平常使用 apache的tomcat来发布tomcat服务器端的文件,其实还有个apache服务器。看了些资料,才得知他们有以下区别:apache是web服务器,tomcat是应用(Java)服务器,它只是一个servlet (jsp也翻译成servlet) 容器,可以认为是apache的扩展。apache和tomcat都可以做为独立的web服务器来运行。但是...

詹煜彪9527 7597

JAVA:Spring Boot3 集成 ShardingSphere 实现数据分库分表

本文介绍了基于Spring Boot和ShardingSphere-JDBC实现分库分表与读写分离的解决方案。针对高并发、大数据量场景下单库单表的性能瓶颈,通过配置ShardingSphere-JDBC实现:1)订单表按user_id和order_id分片到两个库和两张表;2)读写分离,写操作路由至主库,读操作在从库间负载均衡。方案使用Druid连接池优化,支持业务透明,无需修改SQL。

木头 660

javaWeb-08-tomcat体系结构

<!-- .panel_head1 {clear:both; height:30px; padding:0 5px; color:#333; font:bold 22px/30px Arial; text-indent:5px} .notice1 {margin:10px 10px; padding:2px 4px 2px 20px; border:dash

Tech My Life 510

【RV1126/RV1109学习笔记】#基础篇#(2)基础入门使用

一、调试方式 1、串口调试 2、ADB调试 3、网络调试 二、基础外设使用 音频使用(aplay,arecord,amixer) 三、WIFI连接 四、屏幕背光控制

丨晋丨 1855

网络工程师如何利用Python自动Telnet到N个路由器并执行配置?

telnetlib是Python标准库中的一个模块,专门用于实现Telnet协议。通过telnetlib,我们可以方便地与支持Telnet协议的远程设备进行通信。telnetlib提供了基本的Telnet功能,如连接远程主机、发送命令、读取响应等,使得编写Telnet自动化脚本变得非常简单。文档:可以选择中文:虽然telnetlib的功能相对基础,但对于大多数Telnet操作来说已经足够。通过telnetlib,可以轻松地实现与网络设备的交互,完成自动化配置任务。

网络技术联盟站 298

Tomcat安装与配置

1.下载网址 http://tomcat.apache.org/download-70.cgi 2.文件目录层次结构 解压下载的tomcat  zip文件目录层次结构 3.各目录的用途 目 录 用 途 /bin 存放启动和关闭Tomcat的脚本文件 /common/lib ...

毕小烦的学习笔记 2145

抖音小程序:解决获取手机号报错 getPhoneNumber:fail auth deny,登录注册时需要获取用户手机号,getPhoneNumber一直提示错误(Uniapp抖音小程序报错也能解决)

抖音字节小程序获取手机号报错getPhoneNumber:fail auth deny,抖音 小程序 获取手机号 报错 getPhoneNumber:fail auth ,抖音小程序获取手机号始终返回拒绝,抖音小程序获取手机号,已经过了试运营期但依旧报错如何解决,调用 tt.getPhoneNumber 接口报错,登录注册时需要获取用户手机号,getPhoneNumber一直提示getPhoneNumber:fail auth deny,此能力仅支持小程序通过试运营期后可用,默认获取权限,无需申请;unia

✅ 精选推荐文章 4304

教你快速上手Web开发

教你快速上手Web开发 一、基础知识 1、Internet上供外界访问的Web资源分为: (1)静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。 (2)动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。 二、Tomcat服务器 1、安装程序包 tar.gz文件是Linux操作系统下的安装版本 exe文件是Wind...

Bug君的博客 432

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Tomcat

用来装载javaWeb程序,可以称它为Web容器。是一个运行java的网络服务器,底层是Sochet的一个程序,他也是JSP和Servlet的一个容器。path表示的是访问时输入的web项目名,docBase表示的是站点目录的绝对路径。提供能够让别人访问自己写的页面的一个程序。

qq_45190650的博客 370

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

14 Tomcat面试题汇总

Tomcat面试题汇总

weixin_42173947的博客 1307

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

菜鸟学Linux 第102篇笔记 tomcat + JDK

菜鸟学Linux 第102篇笔记 tomcat + JDK内容总览 Java体系 JDK (Java Development Kit) java SE, java EE Tomcat tomcat配置文件 tomcat 应用程序“部署” webapp体系结构 webapp的归档格式 tomcat的运行方式Java体系 java程序设计语言 java API java clas...

weixin_33852020的博客 88

8. HTTP、Tomcat、Servlet

题目1.1.11.22.2.12.23.3.13.23.34.4.14.24.3 1. 1.1 1.2 2. 2.1 2.2 3. 3.1 3.2 3.3 4. 4.1 4.2 4.3

Buluchacha的博客 596

计算机毕设(附源码)JAVA-SSM基于javaweb网上学习与自习系统

项目运行环境配置:(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可4.

bushe902的博客 137

深入理解JVM1 ---JVM的基本体系结构

http://blog.youkuaiyun.com/mshootingstar/article/details/44783227JVM: http://blog.youkuaiyun.com/basycia/article/details/51870428 JVM的相关知识整理和学习java虚拟机是什么?*抽象规范*一个具体的实现*一个运行中的虚拟机实例 Java程序是通过main方法作为程序运行的起点, Web项目是...

euijkfd的专栏 194

Tomcat 的体系结构(超详细)

1.Tomcat架构 1.整体架构 HTTP 服务器接收到请求之后把请求交给Servlet容器来处理,Servlet 容器通过Servlet接⼝调⽤业务 类。Servlet接⼝和Servlet容器这⼀整套内容叫作Servlet规范。 注意:Tomcat既按照Servlet规范的要求去实现了Servlet容器,同时它也具有HTTP服务器的功能。 Tomcat的两个重要身份 ​ 1)http服务器也可以看成一个连接器(Connector) ​ 2)Servlet容器(Container) 2.请求处理流程

Baron的技术blog 3316

tomcat下运行项目war流程

tomcat下运行项目war流程 初做码农,有不足的地方,请多多指教。 前言 肯定有好多新手跟我一样第一次被项目经理命令用tomcat下运行项目war包,作为小白第一次看到肯定毫无头绪,那么我今天就奉上我血淋淋的经验。 废话不说了,直奔主题。 1、先把项目在编译器上搭建好 2、在项目所在文件夹里把WebContent文件拷贝, 3、把WebContent文件夹拷贝到tomcat所在目录下webapps文件夹里面: 4、把拷贝到tomcat目录下的webapps文件里的WebCont..

XHDLDBK的博客 4209

Tomcat之tomcat运行流程

Tomcat的架构 两大核心组件 Connector组件:连接器,主要负责Tomcat与客户端的通讯 Container组件:Servlet容器 一个请求的处理流程 httpConnector就是链接器 httpProcessor是具体的处理类 Container是容器(servlet) Tomcat启动步骤 Bootstrap -> catalina -> ...

日薪灬越亿的博客 1005

tomcat运行流程

Tomcat运行流程 图 tomcat运行流程 假设来自客户的请求为:http://localhost:8080/test/index.jsp 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得 Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应 Engine获得请求localhos

卓凡永存 556

Apache Tomcat 体系结构深度解析

本文深度解析 Apache Tomcat 体系结构,梳理核心组件协作逻辑,拆解请求处理三阶段流程,结合关键源码,呈现从协议解析到 Servlet 调用的完整链路。

Debug日记的博客 854

tomcat的体系结构与请求流程

一、tomcat的体系结构 tomcat里面包含Catalina容器,coyote连接器,jasperJsp引擎,表达式预约JavaEl,命名服务Naming,服务器体重juli等这6大块。 其中Catalina是核心容器。 tomcat的catalina结构图 一个server里面包含多个service 一个service里面包含多个connector connector主要用于...

qq_26997921的博客 289
上一篇: web服务器原理初探
下一篇: Description Resource Path Location Type Access restriction: The constructor LoadLibraryAction(String
hellocdw
博客等级 码龄15年 5粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值