tomcat启动(一)startup.bat|catalina.bat分析
环境: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
参考资源
Tomcat8-启动脚本分析
tomcat启动(一)startup.bat|catalina.bat分析的更多相关文章
- [Tomcat 源码分析系列] (一) : Tomcat 启动脚本-startup.bat
概述 我们通常使用 Tomcat 中的 startup.bat 来启动 Tomcat. 但是这其中干了一些什么事呢? 大家都知道一个 Java 程序需要启动的话, 肯定需要 main 方法, 那么这个 ...
- tomcat启动 报org.apache.catalina.LifecycleException异常
java 服务器 tomcat启动 报org.apache.catalina.LifecycleException异常 异常代码如下: [2018-05-10 04:45:08,856] Artifa ...
- tomcat启动批处理——startup.bat
从文件命名上看就知道这是一个启动批处理,这个批处理的主要功能就是为了找到另一个批处理catalina.bat,并且执行catalina.bat. 一开始就用if "%OS%" == ...
- tomcat启动(二)org.apache.catalina.startup.Bootstrap分析
/** * Bootstrap loader for Catalina. This application constructs a class loader * for use in loading ...
- IDEA tomcat启动异常 org.apache.catalina.startup.ContextConfig parseWebXml
启动Tomcat发现有异常,总是无法启动,具体的异常日志为下图 具体的解决方法为:在tomcat的conf/content.xml中加上<Loader delegate="true&q ...
- [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat
概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...
- myeclipse能启动tomcat但是用startup.bat无法启动
myeclipse能启动tomcat但是用startup.bat无法启动 这个问题困扰了我一天,把一天的周末时间白白花费了.各种百度,各种尝试都没办法解决.在江湖上闯,难道就只有百度一招吗? 不是,我 ...
- Java Tomcat 启动闪屏-原因之一---配置问题
如Tomcat启动异常,首先确保Java安装和Tomcat安装版本是否对应,环境变量是否配置正确,如检查通过后,依然启动闪屏.可以依次解决: 1.在Tomcat启动文件Startup.bat之中最后添 ...
- tomcat 启动失败 和闪退 和 启动成功却没有页面显示
1.解压版tomcat 将tomcat解压至英文目录下, 在系统环境变量里面配置 JAVA_HOME 和CATALINA_HOME (就是tomcat的安装目录) 在path中配置 %CATALINA ...
随机推荐
- PAT甲 1029. Median (25) 2016-09-09 23:11 27人阅读 评论(0) 收藏
1029. Median (25) 时间限制 1000 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given an incr ...
- hdu 5025 bfs+状压
http://acm.hdu.edu.cn/showproblem.php?pid=5025 N*N矩阵 M个钥匙 K起点,T终点,S点需多花费1点且只需要一次,1-9表示9把钥匙,只有当前有I号钥匙 ...
- 好久不发帖,转一下公司技术美术独立完成的U3D模拟暗黑泰瑞尔翅膀物理运动效果
想入公司倍培养成为优秀的技术型美术,欢迎call我! Max制作翅膀模型部分 新建一个片面,模型给一些段数,赋予一张左右二方连续贴图. 加个FFD 4*4*4,并稍微拉出一点弧度. 将头尾的Alpha ...
- js正则处理千分位
"222212345.098771".replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
- NET 集合分页查询
参数: var list = new List<int>(); // 集合 ; // 总数量 ; // 每页查询数量 第一种: ? totalCount / pageSize : tota ...
- c#实现AOP
AOP:面向切面编程,通过预编译方式或运行期动态代理实现程序功能的中统一处理业务逻辑的一种技术,比较常见的场景是:日志记录,错误捕获.性能监控等 AOP详解:https://www.cnblogs.c ...
- 高性能mysql学习笔记
此文已由作者朱笑天授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 笔者在工作之余阅读了一下高性能mysql,以下的内容对mysql的介绍以及书中涉及一些概念的总结归纳. 1. ...
- python远程执行命令
def run(): try: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ...
- Delphi - 如何执行Windows、OSX、Linux的外部程序?
毫无疑问,几乎对所有Delphi程序员来说,不用说如何在Windows下如何执行外部程序了!目前Delphi,真的已经很棒了,Delphi有一套和VCL并驾齐驱的图形界面库,叫做"FireM ...
- asp.net mvc 5 初体验
参考:http://www.asp.net/mvc/tutorials/mvc-5/introduction/getting-started 1. 新建 ASP.Net Web 应用程序,跟着向导一路 ...