1. Tomcat也是一个java程序

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

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

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

catalina.bat

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

setclasspath.bat run

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

catalina.bat

set "CLASSPATH=%CLASSPATH%;"		//环境变量中配置的CLASSPATH
set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar" //设置bootstrap.jar地址
set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar" //设置tomcat-juli.jar
set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%"
set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%" set _EXECJAVA=%_RUNJAVA% //指定java.exe
set MAINCLASS=org.apache.catalina.startup.Bootstrap //指定入口文件类
set ACTION=start
set SECURITY_POLICY_FILE=
set DEBUG_OPTS=
set JPDA= if ""%1"" == ""start"" goto doStart
if "%TITLE%" == "" set TITLE=Tomcat
set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 %_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. Tomcat 系统架构与设计模式2

    门面设计模式 门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中.Standard Wrapper 到 ServletConfig 封装中.Applica ...

  2. R12 查询EBS用户相关SQL

    --R12查询EBS在线用户SQL SELECT U.USER_NAME,       APP.APPLICATION_SHORT_NAME,       FAT.APPLICATION_NAME,  ...

  3. .NET Core2使用Azure云上的Iot-Hub服务

    基于工业4.0大背景下的工业物联网是近几年内热门的话题,依靠信息化技术企业可以实现数字化转型,生产可以实现智能化制造,设备可以实现自动化运作.然而,海量的数据采集是整个建设过程的基础环节,如何处理与利 ...

  4. 使用Eclipse切换TFS工作区

    这个问题首先牵涉到两个概念: - Eclipse的工作区:Eclipse的工作区是运行Eclipse时需要连接的本地代码空间,默认情况下,在Eclipse中创建的项目都保存在Eclipse的工作区中 ...

  5. ES6学习之let声明变量的学习

    1.let和var类似, (1)let与var不同的点:let没有预编译,变量提升这个过程,let声明的变量只能在当前作用域内访问到(一个{}可以看做是一个作用域),在全局var声明的变量属于wind ...

  6. TestNG参数化之@Parameters传参

    通过TestNG实现参数话常用两种方式,一种是借助 @Parameters读取testng.xml中参数,一种是使用@DataProvider注解传参. 此次主要讲解XML传参,语法:在java类中定 ...

  7. CF834D The Bakery

    题目链接:戳我 题意:将一个长度为n的序列分为k段,使得总价值最大.一段区间的价值表示为区间内不同数字的个数 \(n<=35000,k<=50\) 开始想的转移方程是这个样子的--\(dp ...

  8. 新版 iPad Pro 弯了,苹果表示这是正常现象……

    简评:苹果上个月才发布的新版 iPad Pro 出问题了.有用户抱怨说,iPad 出现了机身弯曲.然而苹果公司认为这并不会影响性能,所以坚持这不是一个缺陷,emmm-- 虽然苹果公司的品控一直为人称道 ...

  9. 课堂练习:ex 4-20

    一.习题要求 • 定义一个复数类Complex. • 有相加,输出,模计算函数. • 模计算要求结果保存在第一个复数中. 二.习题内容 //complex.h # ifndef COMPLEX_H # ...

  10. docker 暴露2375 端口。

    网上找的.大多不能用...一下是我自己找了半天的方法...,可能是版本太旧的原因 下图解决方法: ubuntu: 18.04 docker: Docker version 18.09.2, build ...