首页

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

标签:tomcat7,源码分析,Tomcat集成,TOMCAT重构,tomcat源码,原理分析     发布时间:2015-12-14   
  • 云盘下载:
  • [提取码:0000]
       ( 需积分:2  )

一、项目说明

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

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

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

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

二、架构功能模块说明

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

<?xml version='1.0' encoding='utf-8'?> @b@<Server port="8005" shutdown="SHUTDOWN">@b@  @b@  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> @b@  <Listener className="org.apache.catalina.core.JasperListener" /> @b@  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />@b@  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />@b@  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"  @b@  @b@  <GlobalNamingResources> @b@    <Resource name="UserDatabase" auth="Container"@b@              type="org.apache.catalina.UserDatabase"@b@              description="User database that can be updated and saved"@b@              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"@b@              pathname="conf/tomcat-users.xml" />@b@  </GlobalNamingResources> @b@  @b@  <Service name="Catalina">@b@ @b@    <Connector port="8080" protocol="HTTP/1.1"@b@               connectionTimeout="20000"@b@               redirectPort="8443" /> @b@    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />@b@ @b@    <Engine name="Catalina" defaultHost="localhost">@b@ @b@      <Realm className="org.apache.catalina.realm.LockOutRealm"> @b@        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"@b@               resourceName="UserDatabase"/>@b@      </Realm>@b@@b@      <Host name="localhost"  appBase="webapps"@b@            unpackWARs="true" autoDeploy="true"> @b@        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"@b@               prefix="localhost_access_log." suffix=".txt"@b@               pattern="%h %l %u %t &quot;%r&quot; %s %b" /> @b@      </Host>@b@    </Engine>@b@  </Service>@b@</Server>

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

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

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

4个子容器的作用分别是:@b@@b@(1)Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine;@b@@b@(2)Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;@b@@b@(3)Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;@b@@b@(4)Wrapper:每一Wrapper封装着一个Servlet

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

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


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

三、源码说明

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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