一.脚本启动流程
平时在启动tomcat的时候,我们需要执行startup.sh或者startup.bat,可以看一下脚本中的命令
从命令中可以看到,startup.sh执行后,其实也会执行 catalina.sh脚本
接着再来看catalina.sh,其实就是执行
org.apache.catalina.startup.Bootstrap
二.启动流程
从流程图中,可以看到tomcat的启动入口是
org.apache.catalina.startup.Bootstrap#main()方法,
daemon.load(args);
daemon.start();
从这里可以看到两个核心的步骤,分别是load和start方法
2.1 load方法
进入load方法,代码如下
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);
}
从这里可以看到,其实就是通过反射,调用org.apache.catalina.startup.Catalina#load()
继续进入load方法