平时我们通过bin目录下的startup.bat来启动tomcat,startup.bat又调用了catalina.bat,catalina.bat从命令行启动org.apache.catalina.startup.Bootstrap,这个类有main方法,所以可以从命令行执行。

Bootstrap执行后,首先执行init()方法进行初始化,然后调用load()和start()方法。下面具体介绍init()方法、load()、start()方法。

一、init()

1、首先设置catalina.home,catalina.base这两个环境变量;

2、创建了三个类加载器

根据conf/catalina.properties中的配置,初始化了三个ClassLoader:commonLoader、catalinaLoader、sharedLoader;并且把catalinaLoader设置为当前线程上下文的类加载器;

然后通过下面的语句创建Catalina类的对象(变量名是catalinaDaemon):

Class startupClass =catalinaLoader.loadClass ("org.apache.catalina.startup.Catalina");
        Object startupInstance = startupClass.newInstance();

二、load()

通过反射机制,调用catalina对象的load()方法------在该方法中,初始化一些目录,比如temp目录,初始化名称空间,如java:env;然后使用Digester的方式,根据server.xml的配置来装配tomcat的各个组件,这里暂时提一下tomcat的结构,tomcat顶层组件是Server,Server下面有多个Service组件,还有Connector、Engin、Host等。装配组件的过程中,生成了各个组件的对象,并设置了他们之间的关联关系。

三、start()

该方法里面,通过反射机制,调用了Catalina对象的start()方法。Catalina对象的start()方法又调用了Server对象的Start()方法,并设置关闭Server的回调方法。

上面简单说明了一下tomcat的启动过程,下一次会给出tomcat的类图、序列图等来说明各个组件之间的关系。

tomcat的启动过程相关推荐

  1. tomcat启动_tomcat学习|tomcat的启动过程

    开头说两句 小刀博客: https://www.lixiang.red 小刀公众号: 程序员学习大本营 学习背景 在前两篇中,我们讲述了tomcat的源码结构 https://www.lixiang. ...

  2. Tomcat源码解析三:tomcat的启动过程

    Tomcat组件生命周期管理 在Tomcat总体结构 (Tomcat源代码解析之二)中,我们列出了Tomcat中Server,Service,Connector,Engine,Host,Context ...

  3. Tomcat启动过程中找不到JAVA_HOME解决方法

    在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomcat在启动过程中找不到. 报错信息如下:Neither the JAVA_HOME nor the JRE_HOME en ...

  4. java tomcat源码_详解Tomcat系列(一)-从源码分析Tomcat的启动

    在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来. 由于篇幅的原因, 很难把Tomcat所有的知 ...

  5. Tomcat无法启动,报错java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory

    前面一段时间看到Tomcat7.0发布了几个测试版,由于没有稳定,也就没有测试了,今天看到新闻,看到Tomcat7.0正式版已经发布了,到官网上下载下来,看看效果如何. 下面列出Tomcat 7的一些 ...

  6. JAVA项目中找不到tomcat_Tomcat启动过程中找不到JAVA_HOME解决方法

    在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomcat在启动过程中找不到. 报错信息如下:Neither the JAVA_HOME nor the JRE_HOME en ...

  7. tomcat的启动流程及原理

    组件介绍: Tomcat 最重要的是两个组件是:Connector(连接器) 和 Container(容器/集装箱),Connector 组件是可以被替换,这样可以提供给服务器设计者更多的选择,因为这 ...

  8. Tomcat源码解读系列(二)——Tomcat的核心组成和启动过程

    声明:源码版本为Tomcat 6.0.35 前面的文章中介绍了Tomcat的基本配置,每个配置项也基本上对应了Tomcat的组件结构,如果要用一张图来形象展现一下Tomcat组成的话,整个Tomcat ...

  9. tomcat启动过程-start启动

    tomcat源码系列导航栏 tomcat源码分析环境搭建 tomcat启动过程-load初始化 tomcat启动过程-start启动 目录 前言 启动流程 启动入口main函数 代码块一 start ...

最新文章

  1. PHP中把stdClass Object转array的几个方法
  2. DeepFake 入门了解
  3. springmvc二十:数据绑定
  4. 042、用volume container 共享数据 (2019-03-05 周二)
  5. 【UVA1638】杆子的排列
  6. oracle内部错误排查,Oracle内部错误ORA-600:[1112]
  7. 使用smo算法编写svm对CIFAR-10数据分类
  8. DataGrid 首次进入页面时,不要加载任何数据
  9. 截止今年六月底的s9t9
  10. 牛客网sql练习题解(43-51)
  11. win10修改dns服务器命令,Win10怎么更改首选DNS服务器地址?
  12. 使用MATLAB任意修改图片像素大小
  13. excel 置信区间 计算_用Excel求置信区间.ppt
  14. 怎样用excel剔除异常数据_注意避坑 | 这10个错误的Excel使用方法别再用了!
  15. Scratch编程与游戏:大鱼吃小鱼!
  16. android studio 模拟器文件管理器
  17. 阿里巴巴助攻腾讯破6.2亿微商传销第一大案!涉案公众号粉丝2400
  18. 程序员的工资高,到底程序员的工资有多高?那些你不了解的程序员
  19. POJ3420-Quad Tiling
  20. 数据安全及各种加密算法对比

热门文章

  1. 突破生命法则极限!它会是外星生命的遗传密码?
  2. idea做一个日志自动生成的jar包,并用flume做生产者,采集日志数据,用kafka做消费者来消费日志数据
  3. jeecgboot:主表(antd table)默认选中第一条记录
  4. 华为服务器安装Ubuntu 18.04.2 详细步骤(附图文介绍)
  5. 【ZZULIOJ】 Python 1016: 银行利率
  6. 《Linux C编程从入门到精通》——1.4 Linux的常用命令
  7. 静态成员和非静态成员的区别是什么?
  8. MySQL命令行导出导入数据库和数据表
  9. php emoji表情,PHP处理字符中的emoji表情
  10. Pixie: A System for Recommending 3+ Billion Items to 200+ Million Users in Real-Time简介