zoukankan      html  css  js  c++  java
  • Tomcat8源码笔记(四)Server和Service初始化

    上一章 image

    简单说明下Tomcat各个组件:

    Server:服务器,Tomcat服务器,一个Tomcat只有一个Server组件;

    Service:业务层,是Server下最大的子容器,一个Server可以包含多个Service组件;

    Connector:连接器,Service的子容器,一个Service可以有多个Connector连接器,作用体现在对外,接收客户端请求,HTTP、TCP等;

    Container:Service核心组件,通常有Engine、Host、Context、Wrapper,作用是将客户端请求处理;

     

    Server组件

    image

     

    Server实例化

           前面我们已经知道Tomcat实例化的是StandardServer,Server同样实现了Lifecycle接口, 关于Tomcat Lifecycle生命周期,这里就不多讲了 image

         StandardServer实例化初始化了globalNamingResources,具体干嘛的还不清楚,和JNDI相关;Catalina的load方法的initNaming方法,决定了这里会添加第一个监听器NamingContextListener,这个LifecycleListener暂时不需要了解,JNDI上下文相关的.  其次的LifecycleListener是通过server.xml读取.  

    image

       

      也就是说StandardServer实例化之后共有六个LifecycleListener,当然这些LifecycleListener具体作用暂时还不用知道,看名字简单了解下打印日志、内存防止泄露等等.

    image

    StandardServer组件 init初始化

     image

    组件真正的初始化方法initInternal

            只要继承了LifecycleMBeanBase的类,调用父类的initInternal方法,目的是为了将该组件注册到JMX管理,JMX的作用暂时不是现在记录的重点。加载classLoader,也就是commonLoader,指向catalina.home/lib,对下面的jar文件进行校验;最后就是遍历service组件,分别调用init方法初始化.

    image

    Service初始化流程

    image

    上图是我按照StandardService的init方法简单绘制的。在记录Service初始化流程之前,介绍下StandardService实例化的过程。

    Service实例化过程

    先查看下server.xml对于Service元素的定义,以Tomcat中标准的server.xml为例. <Service>下就以这样三个子元素为例,<Executor> <Connector> <Engine>

    image

    关于Tomcat如何解析XML并且生成对应实例,Tomcat8源码笔记(三)Catalina加载过程

    下面就是StandardService初始化具体流程,super.initInternal方法JMX注册; 初始化按照顺序 container--->Executor--->mapperListener---->Connector的顺序,由于每个组件都比较庞大,所以分多篇博客记录。

    image

    总结

    Tomcat的初始化工作,主要是Server初始化,而Server初始化主要看Service的初始化,Service的初始化工作主要是 initInternal方法, 又由其他组件 Container、(Executor)、mapperListener、Connector的初始化来完成。 上面总结了StandardServer、StandardService的实例化、初始化流程。

  • 相关阅读:
    03 JVM 从入门到实战 | 简述垃圾回收算法
    02 JVM 从入门到实战 | 什么样的对象需要被 GC
    01 JVM 从入门到实战 | 什么是 JVM
    从一道面试题探究 Integer 的实现
    程序员如何写一份更好的简历
    自己动手实现分布式任务调度框架(续)
    一个excel(20M)就能干趴你的poi,你信吗?
    一个普通类就能干趴你的springboot,你信吗?
    自己动手实现springboot配置(非)中心
    自己动手实现分布式任务调度框架
  • 原文地址:https://www.cnblogs.com/lvbinbin2yujie/p/10662833.html
Copyright © 2011-2022 走看看