tomcat源码工程

mac2025-10-21  8

一、项目说明

如下图为tomcat项目源码的工程目录,分别标出了项目的输出目录及启动引导类Bootstrap.java

右击上图最后一个文件“build.xml”,选择Run As中"Ant Build"项,然后在根路径输出目录output下“build/bin”路径目录中运行startup.bat文件(如下图所示)

二、架构功能模块说明

1.总体结构 - tomcat总体结构层级:Server>Service>Connector、Engine>Realm(域)、Host>Contex

<?xml version='1.0' encoding='utf-8'?> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> </Engine> ![tomcat7完整的源码及依赖包下载(即编即用)](https://img-blog.csdnimg.cn/20191101174211730.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzY3MTc0Mw==,size_16,color_FFFFFF,t_70)

2.容器关系原理 - 如下图,tomcat两大服务是Connector(连接器)和Container(容器),子容器分为Engine、Host、Context、Wrapper组件组成,容器Container依赖关联Pipeline(通道),Loader(类加载)、Manager(session、容器的管理)、Realm(安全授权认证域)接口类实现容器各职能实施及解耦分层,对于子容器(Engine…)和内部依赖接口(Pipeline…)都是基于JMX注册管理资源服务

4个子容器的作用分别是:

(1)Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine;

(2)Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;

(3)Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;

(4)Wrapper:每一Wrapper封装着一个Servlet

3.流程时序 - 如下图,tomcat个服务、组件及容器类的启动时序流程图,下面结合源码一步步分析

三、源码说明

启动入口类BootStarp初始化init方法加载Catalina类,如下图

2.主容器Catalina类启动方法start启动主实现类StandardServer,如下图

服务类StandardServer启动startInternal方法启动主服务实现类StandardService,如下图

4.主服务类StandardService启动方法startInternal加载连接器类Connector,如下图

5.连接器类Connector通过startInternal方法启动协议解析类如Http11NioProtocol,如下图

6.协议解析类Http11NioProtocol处理类启动原始端子类如NioEndpoint(另JIoEndpoint类、AprEndpoint类),如下图

7.原始端类NioEndpoint,完成线程的初始化启动等,启动线程处理单元网络通信服务Acceptor类,如下图

8.网络通信服务Acceptor类,启动ServerSocket网络通信服务,如下图

tomcat7完整的源码及依赖包下载(即编即用)

最新回复(0)