上一章

简单说明下Tomcat各个组件:

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

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

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

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

Server组件

Server实例化

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

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

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

StandardServer组件 init初始化

组件真正的初始化方法initInternal

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

Service初始化流程

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

Service实例化过程

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

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

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

总结

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

Tomcat8源码笔记(四)Server和Service初始化的更多相关文章

  1. Tomcat8源码笔记(七)组件启动Server Service Engine Host启动

    一.Tomcat启动的入口 Tomcat初始化简单流程前面博客介绍了一遍,组件除了StandardHost都有博客,欢迎大家指文中错误.Tomcat启动类是Bootstrap,而启动容器启动入口位于 ...

  2. Tomcat8源码笔记(五)组件Container分析

    Tomcat8源码笔记(四)Server和Service初始化 介绍过Tomcat中Service的初始化 最先初始化就是Container,而Container初始化过程是咋样的? 说到Contai ...

  3. Tomcat8源码笔记(六)连接器Connector分析

    根据 Tomcat8源码笔记(五)组件Container分析 前文分析,StandardService的初始化重心由 StandardEngine转移到了Connector的初始化,本篇记录下Conn ...

  4. Tomcat8源码笔记(三)Catalina加载过程

    之前介绍过 Catalina加载过程是Bootstrap的load调用的  Tomcat8源码笔记(二)Bootstrap启动 按照Catalina的load过程,大致如下: 接下来一步步分析加载过程 ...

  5. Tomcat8源码笔记(八)明白Tomcat怎么部署webapps下项目

    以前没想过这么个问题:Tomcat怎么处理webapps下项目,并且我访问浏览器ip: port/项目名/请求路径,以SSM为例,Tomcat怎么就能将请求找到项目呢,项目还是个文件夹类型的? Tom ...

  6. Tomcat8源码笔记(一)Lifecycle接口

    第一次阅读Tomcat8源码,就以Lifecycle作为笔记阅读的开篇吧,一千个读者就有一千个哈姆雷特,每个人都Tomcat的理解都不同,如果不记录一次Tomcat源码可能忘了就忘了. 断断DEBUG ...

  7. Tomcat8源码笔记(二)Bootstrap启动

    TOMCAT源码调试入口是Bootstrap类的main方法,我的启动参数VM: -Dcatalina.home=E:/Tomcat_Source_Code/apache-tomcat-8.0.53- ...

  8. tomcat源码阅读之Server和Service接口解析

    tomcat中的服务器组件接口是Server接口,服务接口是Service,Server接口表示Catalina的整个servlet引擎,囊括了所有的组件,提供了一种优雅的方式来启动/关闭Catali ...

  9. laravel5.5源码笔记(七、数据库初始化)

    laravel中的数据库也是以服务提供者进行初始化的名为DatabaseServiceProvider,在config文件的providers数组中有写.路径为vendor\laravel\frame ...

随机推荐

  1. 使用虚拟机VM12安装REHL7

    转载https://blog.csdn.net/qq_19467623/article/details/52869108 转载http://www.07net01.com/2016/03/141198 ...

  2. leveldb 学习记录(八) compact

    随着运行时间的增加,memtable会慢慢 转化成 sstable. sstable会越来越多 我们就需要进行整合 compact 代码会在写入查询key值 db写入时等多出位置调用MaybeSche ...

  3. I/O dempo

    标准读取写入 package io_stream; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; i ...

  4. 【算法】map的应用

    map使用参考链接http://www.cnblogs.com/KID-XiaoYuan/articles/7297709.html 题目 在ACM比赛中,你每解决一道题,你就可以获得一个气球,不同颜 ...

  5. python之内部函数

    1.bool,all,any (1)当内容为空时 >>> a=[] >>> bool(a) False >>> all(a) True >& ...

  6. JSP内置对象seesion

    什么是session session表示客户端与服务器的一次会话 Web中的session指的是用户在浏览某网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间 从上述定 ...

  7. OpenCV图像分割1

    1.基于阈值 1.1原理 灰度阈值化,假设输入图像为f,输出图像为g,则阈值化公式如下: g(i,j)=1  当f(i,j)>=T g(i,j)=0 当f(i,j)<T 1.2适用范围 当 ...

  8. jvm参数与GC

    一.JVM的新生代.老年代.与永久代 JVM中的堆,一般分为三大部分:新生代.老年代.永久代: 1.新生代:主要是用来存放新生的对象,一般占据堆的1/3空间.由于频繁创建对象,所以新生代会频繁触发Mi ...

  9. DE1-SOC资源

    1,digital solution lab 网站上的de1soc QT教程. 内容包括: Install Qt 5.4 Designer Install the Altera SoC Tool-Ch ...

  10. 中国剩余定理poj1006

    中国剩余定理即解一组带余除法的不定方程组(同余式组解法). 例如:求一个最小数x,已知x%3=2且x%5=3且x%7=2. 思路就是: 1.先从(3,5)的公倍数中找一个%7=1的最小公倍数,这里是1 ...