1. Tomcat也是一個java程序
最終的入口啟動文件:org.apache.catalina.startup.Bootstrap
最后一條命令: start "Tomcat" "C:\Program Files\Java\jdk1.8.0_131\bin\java.exe" "-Djdk.tls.ephemeralDHKeySize=2048" -Djava.util.logging.config.file="G:\program-my\apache-tomcat-8.0.36\conf\logging.prope rties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs="G:\program-my\apache-tomcat-8.0.36\endorsed" -classpath "G:\program-my\apache-tomcat-8.0.36\bin\bootstr ap.jar;G:\program-my\apache-tomcat-8.0.36\bin\tomcat-juli.jar" -Dcatalina.base="G:\program-my\apache-tomcat-8.0.36" -Dcatalina.home="G:\program-my\apache-tomcat-8.0.36" -Djava.io.tmpdir="G:\program-my \apache-tomcat-8.0.36\temp" org.apache.catalina.startup.Bootstrap start
2. 啟動順序如下
涉及3個文件(分析只保留主要邏輯),執行順序如下:
startup.bat
set "CURRENT_DIR=%cd%"
cd ..
set "CATALINA_HOME=%cd%" //定位到Tomcat文件夾的根目錄
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
call "%EXECUTABLE%" start %CMD_LINE_ARGS% //執行catalina.bat start
catalina.bat
set "CATALINA_BASE=%CATALINA_HOME%" //設置變量
//如果CATALINA_HOME里面沒有";", 跳轉到homeNoSemicolon執行, 有就退出
if "%CATALINA_HOME%" == "%CATALINA_HOME:;=%" goto homeNoSemicolon
if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome //無setenv.bat
if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath //setclasspath.bat存在
call "%CATALINA_HOME%\bin\setclasspath.bat" %1%
setclasspath.bat run
set "JRE_HOME=%JAVA_HOME%"
set _RUNJAVA="%JRE_HOME%\bin\java.exe" //指定java.exe
set _RUNJDB="%JAVA_HOME%\bin\jdb.exe"
catalina.bat
set "CLASSPATH=%CLASSPATH%;" //環境變量中配置的CLASSPATH
set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar" //設置bootstrap.jar地址
set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar" //設置tomcat-juli.jar
set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%"
set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%"
set _EXECJAVA=%_RUNJAVA% //指定java.exe
set MAINCLASS=org.apache.catalina.startup.Bootstrap //指定入口文件類
set ACTION=start
set SECURITY_POLICY_FILE=
set DEBUG_OPTS=
set JPDA=
if ""%1"" == ""start"" goto doStart
if "%TITLE%" == "" set TITLE=Tomcat
set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%