`

Tomcat 源码分析

 
阅读更多
Tomcat 源码分析
------------------

Bootstrap
引导过程:

1 初始化自定义的类加载器:
common
shared
catalina

2 创建并实例化第一个组件类 Catalina

Tomcat 组件体系:
Server
    Service
        Connector
        Engine
            Host
                Context


实现Lifecycle生命周期接口: 表示支持生命周期管理.
start
stop

实现MBeanRegistration接口: 表示这是一个MBean.

实现Service接口,表示这是一个服务组件.

3. 创建Server, Service, Connector, Executor, LifecycleListener, GlobalNamingResource 等组件
读取配置文件 conf/server.xml 并通过反射调用:
setServer(Catalina)
setGlobalNamingResources
addLifecycleListener
addService
addExecutor
addConnector

4. 初始化 Server
StandardServer
4.1 JMX 注册 StandardServer MBean 到 JMBean Server,名称:Catalina:type=Server
4.2 注册 StringCache MBean, 名称: Catalina:type=StringCache

5. 初始化 Service, Executor, Connector
StandardService
5.1 注册 StandardService MBean, 名称: Catalina:type=Service,serviceName=Catalina
5.2 注册 StandardThreadExecutor MBean,名称: Catalina:type=Executor,name=org.apache.catalina.core.StandardThreadExecutor
5.3 注册 Connector MBean, 名称: Catalina:type=Connector,port=8080,address=127.0.0.1
Catalina:type=Connector,port=8009,address=127.0.0.1
5.4 创建适配器CoyoteAdapter
5.5 初始化ProtocolHandler, 我们这里只看Http11Protocol

6 JIoEndpoint
处理TCP连接,默认一个连接分配给一个线程,支持队列.
6.1 创建 DefaultServerSocketFactory
6.2 创建 ServerSocket

---------------- 引导初始化 ---------------

7 启动Server
7.1 启动Service
7.2 启动 Servlet Engine
     注册 StandardEngine, 名称: Catalina:type=Engine
     读取并注册 conf/tomcat5-mbeans.xml, 调用 MBean.init
    
7.3 启动 Executor
     创建 TaskQueue, TaskThreadFactory
     创建 线程池 ThreadPoolExecutor
    
7.4 启动 Connector
     注册JIOEndpoint, 名称: Catalina:type=ThreadPool,name=HTTP11Protocol
     注册GlobalRequestProcessor, 名称: Catalina:type=GlobalRequestProcessor,name=HTTP11Protocol

7.5 启动 JIOEndpoint
     创建 WorkerStack 工人线程集合
     启动TCP接收线程

8 启动TCP处理线程
当有连接建立时,会获取一个Socket对象.
一个ServerSocket可以服务多个Socket. 并发时会有多个ServerSocket.

过程如下:
并发情况下, Socket处理会加入队列, 队列满时,会抛出拒绝连接异常.
正常情况下会启动 SocketProcessor线程处理Socket. 在线程内转交对应的协议Processor来进行处理.
然后获取Socket Stream,保存到InputBuffer/OutputBuffer
解析请求头
然后调用 adapter.service(request, response) 转交请求数据给adapter.
adapter将请求转交给enginee -> host -> context -> listener -> wrapper -> filter -> ApplicationFilterChain -> Servlet.service() 来链式处理.
...
关闭Socket
重复上面过程



















-> Catalina -> conf/server.xml -> Server -> StandardServer -> Service -> StandardService -> Connector -> CoyoteAdapter -> ProtocolHandler -> Http11Protocol -> JIoEndpoint -> Http11ConnectionHandler -> ServerSocketFactory
-> StandardThreadExecutor -> ThreadPoolExecutor -> WorkerStack -> Acceptor -> SocketProcessor -> Request & Response -> Adapter -> CoyoteAdapter -> StandardWrapper -> Filter & Servlet
分享到:
评论

相关推荐

    tomcat 源码分析系列文档

    【标签】"tomcat源码分析"表明整个资料集专注于Tomcat的源代码级探索,适合于开发者或运维人员深入了解服务器的底层实现。 【文件名称列表】中的每个文档都对应一个特定主题: 1. "Tomcat处理HTTP请求源码分析.doc...

    TOMCAT源码分析(启动框架)

    【TOMCAT源码分析(启动框架)】 Tomcat是一款广泛应用的开源Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,为Web应用程序提供了运行环境。本篇文章将深入探讨Tomcat的系统框架及其启动流程...

    Tomcat源码分析

    【标题】"Tomcat源码分析" 在深入探讨Tomcat源码之前,首先需要了解Tomcat是什么。Tomcat是一款开源的、基于Java的Web应用服务器,由Apache软件基金会开发。它实现了Java Servlet和JavaServer Pages(JSP)规范,...

    tomcat源码分析

    【Tomcat源码分析】 Tomcat是一款开源的Java Servlet容器,是Apache软件基金会下的Jakarta项目的一部分。深入理解Tomcat的源码对于开发者来说是非常有价值的,因为它可以帮助我们更好地理解和优化Web应用程序的性能...

    Tomcat源码分析1

    《Tomcat源码分析1——服务启动与架构详解》 Tomcat,作为一款广泛应用的开源Java Servlet容器,其内部架构和启动流程对于深入理解和优化Web应用程序至关重要。本文将重点解析Tomcat启动时的关键步骤和核心组件,...

    tomcat源码分析1

    《深入理解Tomcat源码分析1:Connector配置详解》 Tomcat,作为广泛使用的Java Servlet容器,其核心组件之一就是Connector,它负责处理Web服务器与客户端之间的通信。本篇文章将详细探讨Tomcat Connector的种类、...

    Tomcat源码分析_v4 完整版1

    【Tomcat源码分析_v4 完整版1】这篇文档主要探讨了Tomcat源码中的部分核心概念,包括XML解析框架Digester的工作原理及其在Java对象映射中的应用。以下是对这些知识点的详细说明: **Java对象创建与管理:** 在...

    TOMCAT源码分析(启动框架).pdf

    ### TOMCAT源码分析——启动框架详解 #### 一、前言 TOMCAT作为一款广泛使用的开源Java Servlet容器,其内部实现复杂且强大。本文旨在深入剖析TOMCAT的启动框架及其整体架构,帮助读者更好地理解其工作原理。...

    tomcat源码分析图谱

    tomcat的基础脚本分析 tomcat的源码启动分析 tomcat的web应用启动分析 tomcat的socket分析 tomcat的cocket与容器对接时序分析

    「Tomcat源码剖析」.pdf

    Tomcat源码剖析 : 整体架构 层层分析 源码解析 架构分析 (Http服务器功能:Socket通信(TCP/IP)、解析Http报文 Servlet容器功能:有很多Servlet(自带系统级Servlet+自定义Servlet),Servlet处理具体的业务逻辑...

    tomcat6源码分析

    《Tomcat6源码分析——深入理解Web服务器的运行机制》 Tomcat6作为Apache软件基金会的Jakarta项目的一部分,是一款广泛使用的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,为开发和部署...

    tomcat架构的源码分析

    ### Tomcat架构的源码分析 #### 一、Tomcat的架构概述 Tomcat作为一款广泛使用的开源Java Servlet容器,其内部架构设计简洁而高效。本文档将对Tomcat的架构进行详细介绍,并从源码层面深入分析其核心组成部分。...

    tomcat源码

    Apache Tomcat源码分析 Apache Tomcat是一款广泛应用的开源Java Servlet容器,它是Java EE Web应用程序的标准实现。Tomcat源码的深入理解对于Java Web开发者来说是至关重要的,它可以帮助我们了解HTTP服务器的工作...

    tomcat 最全源码分析

    对 NIO 模式,请求的流程描述的很详细。值得去仔细的研究。

Global site tag (gtag.js) - Google Analytics