环境: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
也是设置环境变量