1. Tomcat也是一个java程序

最终的入口启动文件:org.apache.catalina.startup.Bootstrap

  1. 最后一条命令: 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

  1. set "CURRENT_DIR=%cd%"
  2. cd ..
  3. set "CATALINA_HOME=%cd%" //定位到Tomcat文件夹的根目录
  4. set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
  5. call "%EXECUTABLE%" start %CMD_LINE_ARGS% //执行catalina.bat start

catalina.bat

  1. set "CATALINA_BASE=%CATALINA_HOME%" //设置变量
  2. //如果CATALINA_HOME里面没有";", 跳转到homeNoSemicolon执行, 有就退出
  3. if "%CATALINA_HOME%" == "%CATALINA_HOME:;=%" goto homeNoSemicolon
  4. if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome //无setenv.bat
  5. if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath //setclasspath.bat存在
  6. call "%CATALINA_HOME%\bin\setclasspath.bat" %1%

setclasspath.bat run

  1. set "JRE_HOME=%JAVA_HOME%"
  2. set _RUNJAVA="%JRE_HOME%\bin\java.exe" //指定java.exe
  3. set _RUNJDB="%JAVA_HOME%\bin\jdb.exe"

catalina.bat

  1. set "CLASSPATH=%CLASSPATH%;" //环境变量中配置的CLASSPATH
  2. set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar" //设置bootstrap.jar地址
  3. set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar" //设置tomcat-juli.jar
  4. set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
  5. set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
  6. set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%"
  7. set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
  8. set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%"
  9. set _EXECJAVA=%_RUNJAVA% //指定java.exe
  10. set MAINCLASS=org.apache.catalina.startup.Bootstrap //指定入口文件类
  11. set ACTION=start
  12. set SECURITY_POLICY_FILE=
  13. set DEBUG_OPTS=
  14. set JPDA=
  15. if ""%1"" == ""start"" goto doStart
  16. if "%TITLE%" == "" set TITLE=Tomcat
  17. set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
  18. set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
  19. %_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%

Tomcat8-启动脚本分析的更多相关文章

  1. HBase配置&启动脚本分析

    本文档基于hbase-0.96.1.1-cdh5.0.2,对HBase配置&启动脚本进行分析 date:2016/8/4 author:wangxl HBase配置&启动脚本分析 剔除 ...

  2. Spark配置&启动脚本分析

    本文档基于Spark2.0,对spark启动脚本进行分析. date:2016/8/3 author:wangxl Spark配置&启动脚本分析 我们主要关注3类文件,配置文件,启动脚本文件以 ...

  3. Hadoop启动脚本分析

    Hadoop启动脚本分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇博客的你估计对Hadoop已经有一个系统的了解了,最起码各种搭建方式你应该是会的,不会也没有关系, ...

  4. 4. hadoop启动脚本分析

    4. hadoop启动脚本分析 1. hadoop的端口 ``` 50070 //namenode http port 50075 //datanode http port 50090 //2name ...

  5. busybox rootfs 启动脚本分析(二)

    上次分析了busybox的启动脚本,这次分析一下init.d中一些脚本的内容. 参考链接 http://www.cnblogs.com/helloworldtoyou/p/6169678.html h ...

  6. busybox rootfs 启动脚本分析(一)

    imx6文件系统启动脚本分析.开机运行/sbin/init,读取/etc/inittab文件,进行初始化. 参考链接 http://blog.163.com/wghbeyond@126/blog/st ...

  7. hadoop启动脚本分析及常见命令

    进程------------------ [hdfs]start-dfs.sh NameNode NN DataNode DN SecondaryNamenode 2NN [yarn]start-ya ...

  8. linux系统 initrd.img中init启动脚本分析

    概述:这篇文章主体内容来源于网上转载.前面几篇文章倾向于制作initrd.img,这篇文章更倾向于initrd.img的运行过程:加载framebuff驱动 ide驱动和文件系统驱动,最后进入到真正的 ...

  9. 内核启动文件系统后第一个执行的文件(inittab启动脚本分析)

    Linux 开机脚本启动顺序: 第一步:启动内核 第二步:执行init (配置文件/etc/inittab) 第三步:启动相应的脚本,执行inittab脚本,并且执行里面的脚本/etc/init.d ...

  10. Hadoop 2.0+YARN启动脚本分析与实战经验

    start-all.sh脚本现在已经废弃,推荐使用start-dfs.sh和start-yarn.sh分别启动HDFS和YARN. 在新一代的Hadoop里面HDFS称为了统一存储的平台,而YARN成 ...

随机推荐

  1. Android Camera的使用(一) 读书笔记

    原文地址 https://blog.csdn.net/junzia/article/details/52301199 拍照步骤1.添加权限2.开启相机时check一下是否有摄像头3.对预览大小.照片大 ...

  2. Centos 下部署tomcat多实例

    基础环境及JDK就不多说了,下面的目录结构以如下为准: 根目录-apps 根目录-apps--tomcat 根目录-apps--ins1 根目录-apps--ins2 ================ ...

  3. vs的 Avalon 自动补全

    以VS2013为例: 1.关闭 Visual Studio 2.打开 C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/Packa ...

  4. 神器与经典--DMVsinSQLServer

    前言: 在不经意间发现这个SQL,正能量瞬间饱满,赶紧向周边的人分享,私藏是罪过啊! 请复制粘贴然后F5,经典无须多说! /************************************** ...

  5. C# WebService调用方法

    public class WebServiceHelper    {        /// < summary>         /// 动态调用web服务         /// < ...

  6. NET Core 拓展方法和中间件集合(支持NET Core2.0+)

    # Pure.NETCoreExtentensions https://github.com/purestackorg/Pure.NETCoreExtensions NET Core 拓展方法和中间件 ...

  7. Android 载入 HTML

    Android 中载入 HTML 有两种方式: 1. 用 TextView.setText(Html.fromHtml("<html></html>")); ...

  8. XSS结合JSONP获取网站访客社交账号信息

    我在本地环境搭建了一个WordPress网站,并在该网站中植入JavaScript文件.如果访客在浏览网站时登录了百度账号,该js文件能够利用JSONP获取网站访客的百度账号信息. 具体情况如下: 1 ...

  9. [Objective-C语言教程]动态绑定(32)

    动态绑定确定在运行时而不是在编译时调用的方法. 动态绑定也称为后期绑定. 在Objective-C中,所有方法都在运行时动态解析.执行的确切代码由方法名称(选择器)和接收对象确定. 动态绑定可实现多态 ...

  10. 部署LVS-NAT群集

    案例环境 LVS调度器作为Web服务器池的网关,LVS两块网卡,分别连接内外网,外网地址172.16.16.172.24,同时也作为整个群集的VIP,内网地址为192.168.7.21-24/24,是 ...