CreateArtTechnology / Blog

  • 背景org.apache.catalina.core包下都是Tomcat最核心的组件,包括Server接口的实现类StandardServer,Engine接口的实现类StandardEngine等。这些核心组件类的基本继承结构都是,继承org.apache.catalina.util.LifecycleMBeanBase,并实现org.apache.catalina包中中对应的接口:
    // Server接口的实现继承LifecycleMBeanBase
    public final class StandardServer extends LifecycleMBeanBase implements Server
    // Engine接口的实现,其中ContainerBase继承LifecycleMBeanBase
    public class StandardEngine extends ContainerBase implements Engine
    public abstract class ContainerBase extends LifecycleMBeanBase implements Container
    ......

    共5张

  • Tomcat源码笔记 - 1.Tomcat启动过程分析
     19     2019-05-08 21:55:26

    背景我们通常启动Tomcat是从catalina.sh脚本或startup.sh(其实也就是catalina.sh)脚本开始的。从catalina.sh开始分析Tomcat源码,会发现其启动类是org.apache.catalina.startup.Bootstrap类。首先,作为一个启动类,解析一些启动参数,读取一些配置,这些都很正常。但再仔细看,有个问题非常奇怪:为什么很多功能只是间接调用org.apache.catalina.startup.Catalina类的类似方法,而且还要用反射的形式?
    简述启动流程启动catalina.sh脚本虽然直接通过Bootstrap类启动也是可以的,但是catalina.sh脚本提供了很多默认配置和参数,省去我们很多工作。catalina.sh脚本的主要工作:
    确认环境在CLASSPATH中添加bin/bootstrap.jar,这个jar包带有Tomcat的Java main方法在CLASSPATH中添加bin/tomcat-juli.jar,这个jar包含有一些启动时会用到的工具类通过jre执行bootstrap.jar中的org.apache.catalina.startup.Bootstrap类,至此启动脚本工作结束
    Bootstrap类main方法被调用正如前边所说,其实Bootstrap类也只是一个包装Catalina类的“启动器”。Bootstrap类的主要工作:
    读catalina.properties配置,生成三个ClassLoader——commonLoader、catalinaLoader、sharedLoader,用于加载Tomcat和Web应用需要的类通过反射获取org.apache.catalina.startup.Catalina类的实例通过反射间接调用Catalina实例的方法,启动或关闭Tomcat
    commonLoader父级ClassLoader是system class loader,属于双亲委派模型中自定义的ClassLoader。用于加载CATALINA_HOME/lib/*.jar。
    ......

    共3张