環境:windows X64位 Tomcat8.0.47
bootstrap.jar是tomcat的內核
開始位置
startup.bat
查看文本
具體的批處理腳本語法可以查看我整理的文章
https://www.cnblogs.com/gne-hwz/p/10009130.html
會先判斷系統環境變量是否為空,如果為空則設置當前目錄路徑為CATALINA_HOME的值,然后調用catalina.bat腳本
在這個腳本內設置CATALINA_HOME 環境變量的值CATALINA_HOMT代表tomcat的安裝目錄(不是bin目錄)
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中
繼續設置環境變量
- _RUNJAVA : %JRE_HOME%\bin\java.exe
- MAINCLASS : 指定了 Tomcat 的啟動類, 沒錯 main 方法就是在這個類里面.
- ACTION : 動作: 就是啟動
- SECURITY_POLICY_FILE : 安全策略文件, 如果啟動的時候加上了 -security 參數的話, 下面會對這個參數指定到 Tomcat 的 conf 目錄下的 catalina.policy 文件.
- JPDA : 這個參數可以百度一下, 我們平時幾乎用不到.
最后到: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
也是設置環境變量
- JAVA_HOME
- JRE_HOME
- JAVA_ENDORSED_DIRS = %CATALINA_HOME%\endorsed
- _RUNJAVA = %JRE_HOME%\bin\java.exe
- _RUNJDB = %JAVA_HOME%\bin\jdb.exe