一、Cataling类分析:

1、Catalina类是启动类,用于启动或者关闭Server对象,它包含一个Digester对象,用于解析tomcat配置文件:conf/server.xml;调用process方法启动Catalina时需要传入参数,如果是start,表示要启动tomcat,如果是stop,表示要关闭tomcat;其他参数还包括-help, -config, -debug, -nonaming;

2、start方法启动tomcat时,首先创建一个Digester实例来解析server.xml文件,在解析xml文件时根据配置信息会生成Server对象,然后调用Server对象的initialize和start方法启动Server对象,接着调用Server.await在8005端口上等待网络接收信息并阻塞,当await方法收到关闭命令并返回时,会调用Server对象的stop方法关闭tomcat;此外start方法还会利用关闭钩子,确保用户突然退出应用程序时会执行Server对象的stop方法;

二、Bootstrap类分析:

1、BootStrap类是一个入口点,负责创建Catalina实例,并调用其process方法;

2、BootStrap类的main方法会创建三个ClassLoader:commonLoader、catalinaLoader、sharedLoader,这三个ClassLoader分别限制了能访问tomcat的不同目录(这样能避免servlet程序员访问了不该访问的路径);在后面实例化Catalina对象时使用的是sharedLoader作为parentClassloader,这样通过层层传递到Context后,Context应用的父类载入器就是sharedLoader;

3、BootStrap类的main方法在创建三个ClassLoader后,接着创建Catalina的实例,然后调用Catalina对象的setParentClassloader和process方法来启动Server;

tomcat源码阅读之Catalina和Bootstrap解析的更多相关文章

  1. Tomcat源码阅读(二)初始化

    近来,我开始阅读tomcat的源码,感觉还挺清晰易懂:为了方便理解,我参考了网上的一些文章,把tomcat的组成归纳一下:整个tomcat的组成如下图所示: Tomcat在接收到用户请求时,将会通过以 ...

  2. SpringMVC源码阅读:Controller中参数解析

    1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...

  3. Mybatis源码阅读-配置文件及映射文件解析

    Mybatis源码分析: 1.配置文件解析: 1.1源码阅读入口: org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(); 功能:解析全局配置文 ...

  4. tomcat源码阅读

    1      工具准备 需要SVN.Maven.JDK.Eclipse.Eclipse M2插件 2      下载源码及发布包 源码在这里:http://svn.apache.org/repos/a ...

  5. tomcat源码阅读之载入器(Loader)

    一.Java类的载入器: 双亲委派模型: 1.JVM提供了三种类型的类加载器:引导类载入器(bootstrap class loader).扩展类载入器(extension class loader) ...

  6. tomcat源码阅读之过滤器

    一.Servlet过滤器: 1.介绍: Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用. Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request ...

  7. tomcat源码阅读之SingleThreadModel

    一.接口简介: 实现了SingleThreadModel接口的servlet类只能保证在同一时刻,只有一个线程执行该servlet实例的service方法,在tomcat实现中会创建多个servlet ...

  8. tomcat源码阅读之BackupManager

    一. 配置: <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOpti ...

  9. tomcat源码阅读之集群

    一. 配置: 在tomcat目录下的conf/Server.xml配置文件中增加如下配置: <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. clas ...

随机推荐

  1. 10. Regular Expression Matching *HARD*

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  2. python 利用quick sort思路实现median函数

    # import numpy as np def median(arr): #return np.median(arr) arr.sort() return arr[len(arr)>>1 ...

  3. 对va_list; va_start ; va_end ;vsprintf理解(转)

    以下为转载内容: int printf(const char* fmt, ...) { va_list args; int i; //1.将变参转化为字符串 va_start(args,fmt); v ...

  4. git忽略操作

    在使用git的过程中,我们会有一些文件是不需要版本管理的,这时候就需要忽略这些文件 这里暂时只讲我用到的办法 全局忽略 在任意位置建立 .gitignore 文件,在其中写入你要忽略文件的规则(写法自 ...

  5. 快速切题 sgu120. Archipelago 计算几何

    120. Archipelago time limit per test: 0.25 sec. memory limit per test: 4096 KB Archipelago Ber-Islan ...

  6. kettle使用命令行来运行ktr和kjb

    1:cmd方式运行 1.ktr的运行:运行transformation文件是通过Pan.bat来运行的. 打开cmd命令行窗口,转到Pan.bat所在的目录,如d:\data-integration, ...

  7. MVC 表单提交

    用户提交表单 写法一(推荐) 一,不带参数 <body> <!--一下写法生成:<form action="/Home/Index" method=&quo ...

  8. harbor私有镜像仓库的搭建与使用与主从复制

    harbor私有镜像仓库,私有仓库有两种,一种是harbor,一种是小型的私有仓库,harbor有两种模式,一种是主 从,一种是高可用仓库,项目需求,需要两台服务器,都有docker.ldap权限统一 ...

  9. apscheduler -定时任务

    https://apscheduler.readthedocs.io/en/latest/userguide.html 简单的使用方式为: from apscheduler.schedulers.bl ...

  10. hdu 1556 Color the ball (线段树+代码详解)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...