環境:windows X64位 Tomcat8.0.47html
bootstrap.jar是tomcat的內核java
開始位置web
startup.batapache
查看文本bootstrap
具體的批處理腳本語法能夠查看我整理的文章windows
https://www.cnblogs.com/gne-hwz/p/10009130.htmltomcat
會先判斷系統環境變量是否爲空,若是爲空則設置當前目錄路徑爲CATALINA_HOME的值,而後調用catalina.bat腳本ide
在這個腳本內設置CATALINA_HOME 環境變量的值CATALINA_HOMT表明tomcat的安裝目錄(不是bin目錄)post
catalina.bat
這裏主要設置的CATALINA_BASE的值,若是環境變量中不存在就將CATALINA_HOME的值賦值給它。
設置臨時環境變量CLASSPATH
若是 Tomcat 的 bin 目錄下面存在 setnv.bat 腳本的話, 就執行它. 一般狀況下是沒有的.
繼而又判斷 setclasspath.bat 腳本是否存在, 若是不存在的話, 直接報錯, 中止啓動 Tomcat.
若是存在的話, 就去調用它, 並把 第一個參數傳進去.
執行完setclasspath後繼續執行catalina.bat
把 Tomcat bin 目錄下的 bootstrap.jar 加入到CLASSPATH環境變量中
設置 CATALINA_TMPDIR 環境變量的值爲 Tomcat 目錄下的 temp 目錄
把 Tomcat bin 目錄下的 tomcat-juli.jar 加入到CLASSPATH中
繼續設置環境變量
最後到:execCmd
爲執行_EXECJAVA這個變量所指定的內容
將_EXECJAVA後面的值追加在_EXECJAVA這個變量後面
這段長命令就是來啓動 BootStrap 類, 並把相應的參數傳進去--------進入BootStrap的main方法
%_EXECJAVA% %LOGGING_CONFIG% %LOGGING_MANAGER% %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%
最後解析出來這條長命令內容:以startup.bat方式啓動tomcat
start "Tomcat" C:\Program Files\Java\jdk1.8.0_66\bin\java.exe -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources" -Djava.endorsed.dirs="%CATALINA_HOME%\endorsed" -classpath "%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_BASE%\bin\tomcat-juli.jar" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_BASE%\temp" org.apache. catalina.startup.Bootstrap start
_EXECJAVA=start "%TITLE%" %_RUNJAVA% _RUNJAVA = %JRE_HOME%\bin\java.exe "%LOGGING_CONFIG%" == "" goto noJuliConfig其實應該是空了,直接跳轉到noJuliConfig標號Override Tomcat's logging config file 覆蓋tomcat的日誌配置文件 LOGGING_CONFIG="-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties" "%LOGGING_MANAGER%" == "" goto noJuliManager爲空直接跳轉到noJuliManager標號 覆蓋tomcat的日誌管理 LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" "JAVA_OPTS=%JAVA_OPTS% -Djava.protocol.handler.pkgs=org.apache.catalina.webresources" "JAVA_OPTS=-Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources" CATALINA_OPTS爲空。 DEBUG_OPTS爲空 JAVA_ENDORSED_DIRS JAVA_ENDORSED_DIRS = %CATALINA_HOME%\endorsed Defaults to $CATALINA_HOME/endorsed. CATALINA_TMPDIR "CATALINA_TMPDIR=%CATALINA_BASE%\temp" Defaults to%CATALINA_BASE%\temp. "CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_BASE%\bin\tomcat-juli.jar" MAINCLASS=org.apache.catalina.startup.Bootstrap CMD_LINE_ARGS不會有參數 ACTION=start
JAVA_OPTS (Optional)
JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048" JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%" "JAVA_OPTS=%JAVA_OPTS% -Djava.protocol.handler.pkgs=org.apache.catalina.webresources" 最終"JAVA_OPTS=-Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources" JSSE_OPTS (Optional) Java runtime options used to control the TLS(安全傳輸協議) rem implementation when JSSE is used. Default is: rem "-Djdk.tls.ephemeralDHKeySize=2048" java運行時的可選項,包括除了CATALINA_OPTS以外的全部選項 Java runtime options used when any command is executed. Include here and not in CATALINA_OPTS all options, that should be used by Tomcat and also by the stop process, the version command etc. Most options should go into CATALINA_OPTS.
CLASSPATH
確保windows系統中的CLASSPATH環境變量值不會用在startup-----CLASSPATH初始值爲空 Ensure that any user defined CLASSPATH variables are not used on startup, CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar" "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar" 最終"CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_BASE%\bin\tomcat-juli.jar"
setclasspath.bat
也是設置環境變量