Tomcat版本tomcat6.0.44
观察catalina.sh文件,启动入口:org.apache.catalina.startup.Bootstrap,
该类main方法执行下面三个方法
-------------------------------------------------
init()         load()        start()
得到Catalina实例     |                            |
               |                            |
               |                            |
               |                            |
               |                            |
catalina.java           |                            |
-----------------------↓---------------------↓-------------
          load()                    start()  Catalina的load()方法:
               |                            |      a、调用initDirs和initNaming()做tmp路径和命名的初始化。
               |                            |      b、调用 createStartDigester();生成Digester对象。Digester类负责进行配置文件的解析。
               |                            |      c、加载配置文件(server.xml),获取输入流InputStream对象
               |                            |      d、利用Digester解析配置文件输入流,解析之后,获取配置的root节点表示对象,也就是Server对象。
               |                            |      e、对上一步生成的server对象进行初始化,调用initialize()启动
standServer.java    |                            |
-----------------------↓---------------------↓-------------
                       initialize()                 start()        Server遍历下属的多个Service,调用每一个server的initialize()/start()
               |                             |
               |                             |
               |                             |
               |                             |
standService.java   |                             |
-----------------------↓---------------------↓-------------
        initialize()            start()
               |                              |
               |                              |
               |                              |
               |                              |
connector.java       |                              |
-----------------------↓---------------------↓-------------
        initialize()           container.start()------>容器Engine.start(),先不关注
               |                  executor.start()------->线程池执行器初始化,该线程做什么用?
               |                  connector.start()------>遍历所有的下属connector,并分别start(),重点分析
               |                              |
               |                              | Connector的initialize()方法:
               |                              |   a、protocolHander.setAdapter(new CoyoteAdapter(this))
               |                              |     b、调用protocolHander的init()方法
               |                              |
               |                              |
Http11NioProtocol.java                           |
-----------------------↓---------------------↓-------------
           init()                        start()
               |                              |   HTTP1ApiProtocol的init()方法:
               |                              |     a、ep.sethander(Http11ConnectionHandler)
               |                              |     b、调用ep的init
NioEndpoint.java    |                              |
-----------------------↓---------------------↓-------------
         init()                        start()

NioEndpoint.init()
{
  ServerSocketChannel serverSock = ServerSocketChannel.open(); //server通道初始化
  serverSock.socket().bind(addr,backlog); //绑定地址,开始进行监听accecpt事件
  NioSelectorPool selectorPool.open();//选择器池初始化
  ……
}
NioEndpoint.start()
{
  //初始化处理线程池,该线程用来处理数据请求
  executor = new ThreadPoolExecutor(getMinSpareThreads(), getMaxThreads(), 60, TimeUnit.SECONDS,taskqueue, tf);
  //初始化poller后台线程组
  for()
  {
    Thread pollerThread = new Thread(pollers[i], getName() + "-ClientPoller-"+i);
    pollerThread.start();
  }
  //初始化acceptor后台线程组
  for()
  {
    Thread acceptorThread = new Thread(new Acceptor(), getName() + "-Acceptor-" + i);
    acceptorThread.start();
  }
  ……
}

Tomcat启动过程(一):从BootStrap到EndPonit的更多相关文章

  1. Tomcat架构解析(二)-----Connector、Tomcat启动过程以及Server的创建过程

    Connector用于跟客户端建立连接,获取客户端的Socket,交由Container处理.需要解决的问题有监听.协议以及处理器映射等等. 一.Connector设计   Connector要实现的 ...

  2. CentOS7 Tomcat 启动过程很慢,JVM上的随机数与熵池策略

    1. CentOS7 Tomcat 启动过程很慢 在centos启动官方的tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的: <co ...

  3. Tomcat启动过程原理详解 -- 非常的报错:涉及了2个web.xml等文件的加载流程

    Tomcat启动过程原理详解 发表于: Tomcat, Web Server, 旧文存档 | 作者: 谋万世全局者 标签: Tomcat,原理,启动过程,详解 基于Java的Web 应用程序是 ser ...

  4. Tomcat源码分析 (七)----- Tomcat 启动过程(二)

    在上一篇文章中,我们分析了tomcat的初始化过程,是由Bootstrap反射调用Catalina的load方法完成tomcat的初始化,包括server.xml的解析.实例化各大组件.初始化组件等逻 ...

  5. 浅读tomcat架构设计和tomcat启动过程(1)

    一图甚千言,这张图真的是耽搁我太多时间了: 下面的tomcat架构设计代码分析,和这张图息息相关. 使用maven搭建本次的环境,贴出pom.xml完整内容: <?xml version=&qu ...

  6. 转:Tomcat启动过程中找不到JAVA_HOME JRE_HOME的解决方法

    转自:http://blog.sina.com.cn/s/blog_61c006ea0100l1u6.html 原文: 在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomca ...

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

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

  8. Tomcat启动过程中找不到JAVA_HOME JRE_HOME的解决方法

    转自:http://blog.sina.com.cn/s/blog_61c006ea0100l1u6.html 原文: 在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomca ...

  9. Tomcat源码分析 (六)----- Tomcat 启动过程(一)

    说到Tomcat的启动,我们都知道,我们每次需要运行tomcat/bin/startup.sh这个脚本,而这个脚本的内容到底是什么呢?我们来看看. 启动脚本 startup.sh 脚本 #!/bin/ ...

随机推荐

  1. 词典对象 NSDictionary与NSMutableDictionary

    做过Java语言或者 C语言开发的朋友应该很清楚关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便,是一种非常常用的数据结构.在Objecti ...

  2. Mybatis where 1=1 和 <where>标签

    <select id="selSampleListByIDX4" resultMap="BaseResultMap" parameterType=&quo ...

  3. jps命令

    转载:http://blog.csdn.net/wanglha/article/details/40181701 ps -- JavaVirtual Machine Process Status To ...

  4. (番外)使用DFS和BFS实现拓扑排序

    1.BFS实现 public class Solution { public int[] findOrder(int numCourses, int[][] prerequisites) { int[ ...

  5. javaSE学习博客与笔记

    equals和==的区别 Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,do ...

  6. [Android疑难杂症]动态改变Background后Padding无效的问题

    前言 在Layout中指定好background和padding以后,程序里面动态修改background之后padding就失效了,貌似是一个BUG,这里找到了一篇英文文章,简单翻译分享一下. 声明 ...

  7. php文字水印和php图片水印实现代码

    本文章向码农们介绍php文字水印和php图片水印实现代码,需要的码农可以参考一下. php 文字水印 文字水印就是在图片上加上文字,主要使用gd库的imagefttext方法,并且需要字体文件. 实现 ...

  8. 题目1005:Graduate Admission

    题目1005:Graduate Admission 时间限制:1 秒 内存限制:32 兆 特殊判题:否 题目描述: It is said that in 2011, there are about 1 ...

  9. Testlink中分析结果的图表显示乱码

    1.下载 tahoma.ttf 字体: 2.下载好后,我们将其放置到,testlink的安装目录的以下文件夹中: testlink/third_party/pchart/Fonts/ 接下来,修改配置 ...

  10. Runtime机制之结构体及操作函数

    一.动态语言 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:具有灵活性,比如:消息转发,方法交换等.它有一个运行时系统Ob ...