Tomcat源码分析三:tomcat启动流程

85 阅读1分钟

一.脚本启动流程

平时在启动tomcat的时候,我们需要执行startup.sh或者startup.bat,可以看一下脚本中的命令

image.png

从命令中可以看到,startup.sh执行后,其实也会执行 catalina.sh脚本

接着再来看catalina.sh,其实就是执行 org.apache.catalina.startup.Bootstrap

二.启动流程

image.png 从流程图中,可以看到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方法

2.2 start方法