从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息、Catalina.base信息,在initClassLoaders方法中初始化类加载器,然后通过反射初始化org.apache.catalina.startup.Catalina作为catalina守护进程;

一、load


Bootstrap中load流程:

  1. 反射调用Catalina的load方法。
  2. 调用Catalina的initDirs()、initNaming()初始化catalinaHome、catalina.useNaming等信息。
  3. 创建Digester对象,调用createStartDigester创建与配置Digester信息,载入Server.xml配置文件,使用Digester解析Server.xml文件,并根据Server文件的配置信息创建Server、Service、Engine、Host、Valve、Realm、Connector、Listener、Resource等对象。
  4. 设置当前Catalina为StandardServer的Catalina对象,调用initStreams。
  5. 调用StandardServer的init方法初始化Server。

调用Bootstrap的load方法中用反射调用Catalina的load,在Catalina中初始化initDirs()路径信息,调用createStartDigester创建与配置Digester信息,载入Server.xml配置文件,使用Digester解析Server.xml文件,并根据Server文件的配置信息创建Server、Service、Engine、Host、Valve、Realm、Connector、Listener、Resource等对象,及对象的关联关系(Digester的相关知识这里就不介绍了)。由于在Digester解析Server.xml的时候已经创建Server对象,所以这里也将server的init方法初始化Server对象,至此Bootstrap执行完成,准确的说是Catalina的load载入完成。

二、start
    接着将调用Bootstrap的start方法启动容器,在start方法中也是通过反射调用Catalina的start方法,如下图:

然后在Catalina中调用StandardServer对象的start方法启动server,在start方法中就会像我们在Tomcat源码分析之—组件启动实现分析那节中分析的一样,通过Tomcat的生命周期管理观察者模式实现对Service、Connector、Engine、Host、Context、Wrapper、Pipeline的启动,这里就不重复在讲解了;

三、注册关闭钩子(ShutdownHook)

 if (shutdownHook == null) {
shutdownHook = new CatalinaShutdownHook();
}
Runtime.getRuntime().addShutdownHook(shutdownHook);

四、调用await()与stop(),等候关闭请求与stop容器

    调用Catalina的await实际上就调用StandardServer的await如上图,等候<Server port="8006" shutdown="SHUTDOWN">在Server 8006端口上的SHUTDOWN关闭Tomcat请求。
接收到SHUTDOWN请求后调用StandardServer的stop方法与destroy方法如下图:

生命周期管理观察者模式实现对Service、Connector、Engine、Host、Context、Wrapper、Pipeline的关闭与释放资源

五、总结
    Tomcat的启动与关闭流程到此就结束了,整个流程还是比较清晰的,只要清除Tomcat的启动流程也自然就懂得了Tomcat的关闭流程,Tomcat中使用了观察者模式对Tomcat的生命周期进行了管理,了解LifecycleBase、Lifecycle、LifecycleSupport等相关类也就了解了整个流程,整个流程的时序图如下:

Tomcat启动与关闭时序图

文章首发地址:Solinx

http://www.solinx.co/archives/121

Tomcat源码分析之—具体启动流程分析的更多相关文章

  1. Cocos2dx源码赏析(1)之启动流程与主循环

    Cocos2dx源码赏析(1)之启动流程与主循环 我们知道Cocos2dx是一款开源的跨平台游戏引擎,而学习开源项目一个较实用的办法就是读源码.所谓,"源码之前,了无秘密".而笔者 ...

  2. [Abp vNext 源码分析] - 1. 框架启动流程分析

    一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...

  3. ASP.NET Core MVC 源码学习:MVC 启动流程详解

    前言 在 上一篇 文章中,我们学习了 ASP.NET Core MVC 的路由模块,那么在本篇文章中,主要是对 ASP.NET Core MVC 启动流程的一个学习. ASP.NET Core 是新一 ...

  4. ThinkPHP5.0源码学习之框架启动流程

    ThinkPHP5框架的启动流程图如下: ThinkPHP5的启动流程按照文件分为三步: 1.请求入口(public/index.php) 2.框架启动(thinkphp/start.php) 3.应 ...

  5. 简单读!tomcat源码(一)启动与监听

    tomcat 作为知名的web容器,很棒! 本文简单了从其应用命令开始拆解,让我们对他有清晰的了解,揭开神秘的面纱!(冗长的代码流水线,给你一目了然) 话分两头: 1. tomcat是如何启动的? 2 ...

  6. Android -- Camera源码简析,启动流程

    com.android.camera.Camera.java,主要的实现Activity,继承于ActivityBase. ActivityBase 在ActivityBase中执行流程: onCre ...

  7. wordpress学习二:源码目录结构和启动流程

    wordpress安装后的文件目录如下: 其中的主要目录和文件用途介绍如下: wp-admin:用于进行博客后台设置的功能目录 wp-content: wordpress的 主题,插件和本地化的存储目 ...

  8. Spring源码解析02:Spring IOC容器之XmlBeanFactory启动流程分析和源码解析

    一. 前言 Spring容器主要分为两类BeanFactory和ApplicationContext,后者是基于前者的功能扩展,也就是一个基础容器和一个高级容器的区别.本篇就以BeanFactory基 ...

  9. Spring源码解析 | 第二篇:Spring IOC容器之XmlBeanFactory启动流程分析和源码解析

    一. 前言 Spring容器主要分为两类BeanFactory和ApplicationContext,后者是基于前者的功能扩展,也就是一个基础容器和一个高级容器的区别.本篇就以BeanFactory基 ...

随机推荐

  1. 【2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D】---暑假三校训练

    2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D Problem D. Distribution in Metagonia Input ...

  2. 初识Spring框架

    一.Ioc 1)概念:Ioc(Inversion Of Control)控制反转,也被称为依赖注入DI(Dependency Injection),是面向对象编程的一种思想. 2)作用:用来减低程序代 ...

  3. 【转】MySQL的Replace into 与Insert into on duplicate key update真正的不同之处

    原文链接:http://www.jb51.net/article/47090.htm   今天听同事介绍oracle到mysql的数据migration,他用了Insert into ..... on ...

  4. Ionic 今天发布了Windows 桌面版的IDE Ionic Lab

    Ionic简介: Ionic 是一个强大的 HTML5 应用程序开发框架,号称 Advanced HTML5 Hybrid Mobile AppFramework 是 AngularJS 移动端解决方 ...

  5. Voix.js – 使用声音来控制和操纵你的网站

    我们通常使用鼠标和键盘(在移动端使用触摸)来操作网站,如今 Voix.js 能够让我们使用声音控制网站,很酷吧?它可以启动和停止侦听麦克风,在检测到一个给定的关键字时触发绑定的特定事件.Voix.js ...

  6. mongodb 数据库操作--备份 还原 导出 导入

    mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport 一,mongodump备份数据 ...

  7. 总结CSS3新特性(Animation篇)

    动画(Animation),是CSS3的亮点.//之一 通过animation属性指定@keyframe来完成关键帧动画; @keyframe用法: @keyframes name { 0% { to ...

  8. CSS学习总结(一)

    不知道大家对CSS的印象是怎么样的呢?也许有些模糊,也许根本不清楚.其实它跟我们密切相关,一旦我们浏览网页,都在与它打交道.没有它,我们看不到现在如此丰富多彩的网页效果.那么它到底是什么呢?又该如何使 ...

  9. 错误 24 无法嵌入互操作类型“ESRI.ArcGIS.Geometry.PointClass”。请改用适用的接口。 E:\MyGIS\MyGIS\Form1.cs 78 37 MyGIS

    解决办法:选中那个引用,在属性页,将“嵌入互操作”设置为false

  10. DEV控件:gridControl常用属性设置(转载)

    特别长,先撸下来再说 1.隐藏最上面的GroupPanel  gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值  sValue=T ...