tomcat(1)之Bootstrap.java

本文详细解析了Tomcat启动过程中的关键步骤,包括类加载器的初始化与Catalina实例的创建。通过深入源码,阐述了如何通过反射机制加载与启动Catalina组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此类的作用,就是
* Initialize daemon. 初始化
* 主要有以下过程
* 1)设置环境变量,初始化类加载器,事实上就是为commonLoader,catalinaLoader,sharedLoader,不过这里其实都为
* commonLoader,因为其它几个并没配置,配置文件位于
org.apache,catalina.startup中的catalina.properties。
common.loader=${catalina.home}/lib,${catalina.home}/lib/*.jar
server.loader=
shared.loader=

* 2)设置当前线程当前类加载器,也是commonLoader,其实commonLoader就是批向tomcat/lib中的一个加载器.
也是tomcat的核心类库的加载位置,相然用的一些包也可以放在这个目录,同样可以被tomcat默认加载器
加载。
* 3)加载org.apache.catalina.startup.Catalina,并设置父加载器为commonLoader,最后把实例附值给catalinaDaemon
通过反射方式得到Catalina实例,同时设置Catalina的一个属性(也就是父加载器)为:commonLoader
然后把实例传给属性catalinaDaemon,其它方法通这个实例来操作类Catalina的实例。
* 初始化完成.
* 从这个初始化来看,只处理两个方面,1)设置加载器 2)产生Catalina实例
* 然后如一些start,load,stop都是调用类Catalina中相应方法来完成.(利用反射的方式)
我们看批处理最后执行的命令为:..apache.catalina.startup.Bootstrap start,显然带的参数是start.
在启动时主要执行Catalina实例的二个方法:

1)load
2)start
源码:
daemon.load(args); //加载参数,这里args为main方法中的参数,从最后批处理执行来看,只一个参数start,因此
//args中只有一个元素的数组,这个元素值为:start
daemon.start();

我们来看看方法Bootstrap中的load做了什么事。
----------------------------------------------------------------------------------------------------
/**
* Load daemon.
*/
private void load(String[] arguments)
throws Exception {

// Call the load() method
String methodName = "load";
Object param[]; //定义参数
Class paramTypes[]; //定义方法参数类型
if (arguments==null || arguments.length==0) {
paramTypes = null;
param = null;
} else {
paramTypes = new Class[1];
paramTypes[0] = arguments.getClass();
param = new Object[1];
param[0] = arguments;
}
Method method =
catalinaDaemon.getClass().getMethod(methodName, paramTypes);
if (log.isDebugEnabled())
log.debug("Calling startup class " + method);
method.invoke(catalinaDaemon, param);

}
注:从原码看得出来,这个方法是把从args主方法传入的值,也就是start再作为参数执行Catalina中的load方法。

再来看看start做了什么。
----------------------------------------------------------------------------------------------------
public void start()
throws Exception {
if( catalinaDaemon==null ) init(); //如果实例为空,进行初始化。

Method method = catalinaDaemon.getClass().getMethod("start", (Class [] )null);
method.invoke(catalinaDaemon, (Object [])null);

}

注:从原码看得出,也就执行Catalina中的start方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值