这周部门同事要求我来进行分享一下Tomcat,我也在空余的时间对Tomcat的源码进行了阅读。
最初拿到这样一个事情,我也是比较头疼的,找不到着手点进行讲解。后来在网上查询了一些资料,对Tomcat的整体架构也有了一点了解。于是我开始着手于对Tomcat源码跟踪。
Tomcat整体是由多个组件组成,最顶层的组件是Server,一个Server代表着一个JVM实例,由Server进行初始化、销毁下面的组件。整个实例就好像一条流水线一样,由上层组件初始化下层组件,就这样一层一层的进行初始化和启动。
由上面的图可以看出,组件的组合关系。
Server包含多个Service,一个Service包含多个Connector和一个Engine;
一个Engine包含多个Host;
一个Host包含多个Context;
其中Engine、Host、Context都有共同的父类,ContainerBase。
关于每一个组件的功能,我这里不再赘述,网络上的资料有很多,大家可以自行查询。
接下来讲解关于从浏览器接收到请求的处理流程。
从名字可以看出来,Connector是用来处理关于连接的组件。
Connector包含两个主要的成员(默认协议HTTP1.1):JIOEndPoint、Http11ConnectionHandler
JIOEndPoint用来监听端口,当有新的连接过来,使用线程池进行处理。
SocketWrapper<Socket> wrapper = new SocketWrapper<Socket>(socket); wrapper.setKeepAliveLeft(getMaxKeepAliveRequests()); // During shutdown, executor may be null - avoid NPE if (!running) { return false; } getExecutor().execute(new SocketProcessor(wrapper));
实际在SocketProcessor中处理请求的是,Http11ConnectionHandler。
在Http11ConnectionHandler中经过一系列处理,最终由CoyoteAdapter对象调用service方法处理Request。
在service方法中,获得当前的Connection找到对应的Engine,将Request交给对应的Engine处理。
再由Engine根据自己的pipleline将request一层层传递下去,最终在StandardWrapper中获得filterChanin,调用servlet。
整个流程如上图所示。
其中在将request交给Engine之后的一步步处理很形象化。
上面说到,Engine,Host,Context都有一个共同的父类ContainerBase,也就是容器类。
每一个容器类都包含一个Pipeline,也就是管道,而Pipeline里包含的子元素的接口都是Valve,也就是阀门。
每一个容器类在处理Request都必须交由给当前容器的Valve来处理,再由Valve传递给下一个Container进行处理。
//=========================下面这句话是我抄来的==================================
让我们来想象一下:
当一个Request进入一个容器后, 它就在管道里面流动,波罗~ 波罗~ 波罗~ 地穿过各个阀门。在流到最后一个阀门的时候,吧唧~ 那个该死的阀门就把它扔给了子容器。 然后又开始 波罗~ 波罗~ 波罗~ ... 吧唧~.... 波罗~ 波罗~ 波罗~ ....吧唧~.... 就是通过这种方式,Request 走完了所有的容器。( 感觉有点像消化系统,最后一个地方有点像那里
//=========================上面这句话是我抄来的==================================
相关推荐
### Tomcat通俗讲解 #### 一、什么是Tomcat Tomcat是Apache软件基金会下的Jakarta项目中的一个开源的轻量级Web服务器。简单来说,Tomcat可以被理解为一款产品,这款产品的目标是为了简化开发人员的工作流程,提高...
下面将深入讲解这些组件以及Tomcat的工作流程。 **Catalina(Servlet容器):** Catalina是Tomcat的核心,负责管理和执行Servlet。Servlet是一种Java类,用于扩展服务器的功能。当客户端(如浏览器)发送请求到...
Tomcat的核心功能在于接收HTTP请求并返回HTTP响应,其工作流程主要包括以下几个关键步骤: 1. **接收请求**:当客户端(浏览器)发送HTTP请求到服务器时,Tomcat的Acceptor线程会捕获这个连接,将其放入一个工作...
6. "Tomcat源码研究.pdf":提供了一个全面的源码分析概览,可能包括了Tomcat的主要组件、设计模式以及关键流程。 7. "tomcat源码分析之一架构.pdf":可能涵盖了Tomcat的整体架构,包括Catalina、 Coyote、Jasper等...
Catalina处理请求响应流程,Jasper负责将JSP转换为Servlet,Coyote则管理网络通信,而Apr提供了操作系统级别的接口。 Chapter03 "Configuring Tomcat"讲解了如何配置Tomcat服务器,包括server.xml、web.xml等核心...
书中还深入探讨了Tomcat的请求处理流程,包括如何解析HTTP请求并为请求分配合适的处理器。请求处理流水线(Pipeline)是Tomcat中的一个核心概念,它定义了请求处理的顺序,通过一系列的Valve(阀门)对请求进行拦截...
- **工作原理**:深入剖析了Tomcat如何处理客户端请求的过程,包括请求接收、处理和响应生成。 #### 1.13《How Tomcat Works》读书笔记(三): Tomcat default connector - **默认Connector**:默认情况下,Tomcat...
《译How Tomcat Works(第二章)》这篇文章主要讲解了Apache Tomcat服务器的工作原理,它是一个开源的Java Servlet容器,广泛用于部署Web应用程序。在这一章中,我们将深入探讨Tomcat如何处理HTTP请求,以及其内部架构...
接下来,书籍可能会深入到Tomcat的架构,包括服务器的启动流程、线程模型、请求处理机制等。读者会了解到如何配置和管理Tomcat服务器,例如设置端口、修改默认目录结构、配置虚拟主机等。此外,书中还会讨论Tomcat的...
综上所述,第三章主要讲解了Tomcat的基本架构、请求处理流程、配置文件解析、Servlet生命周期以及性能优化策略。这些知识对于理解和调试Tomcat服务器,以及优化Web应用的性能至关重要。通过深入学习这一章,开发者...
这个部分介绍了如何构建一个简单的Servlet容器实例,包括处理HTTP请求的基本流程。 - **HttpServer1类**:负责接收HTTP请求并创建Request和Response对象。 - **Request类**:封装HTTP请求的信息。 - **Response类**...
《Tomcat权威指南》是一本深受开发者欢迎的书籍,它深入浅出地讲解了Apache Tomcat服务器的使用、配置和优化。Tomcat是Apache软件基金会的项目,是一款开源的Java Servlet容器,主要用于运行Java Web应用。它轻量级...
《How Tomcat Works》是一本专门讲解Tomcat内部工作机制的书籍,对广大Java开发者,尤其是对Tomcat源码和servlet容器工作原理感兴趣的开发者来说,这本书能够帮助他们深入了解Tomcat的架构以及如何进行自定义和优化...
Tomcat作为Servlet容器,其核心工作流程包括解析HTTP请求、创建Servlet实例、调度Servlet的生命周期方法(如init、service、destroy)以及管理Session等。 在书中,作者会详细讲解Tomcat如何处理HTTP请求。当一个...
其结构图展示了从连接器接收到请求到生成响应的整个流程。书中详细分析了Tomcat的版本4和版本5之间的主要差异,包括架构调整、性能改进以及新功能的引入,帮助读者理解不同版本间的选择依据。 四、章节内容概览 ##...
3. **Tomcat启动流程**:从启动脚本到各个组件的初始化,再到服务的监听与处理,Tomcat的启动过程涉及了多个步骤。了解这一过程有助于优化服务器配置和排查问题。 4. **Servlet容器**:Catalina是Tomcat的主要部分...
在书中,读者将了解到Tomcat 8的核心架构,包括其线程模型、请求处理流程和组件交互机制。这些知识点对于理解Tomcat如何高效地处理Web请求至关重要。作者详细介绍了如何配置服务器,包括设置端口、调整内存分配、...