博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tomcat启动批处理——startup.bat
阅读量:5953 次
发布时间:2019-06-19

本文共 2149 字,大约阅读时间需要 7 分钟。

从文件命名上看就知道这是一个启动批处理。这个批处理的主要功能就是为了找到还有一个批处理catalina.bat,而且运行catalina.bat。
一開始就用if "%OS%" == "Windows_NT" setlocal 推断系统是否为Windows_NT。假设是的话则使用setlocal命令,此命令表示之后全部对环境变量的改变仅仅限于该批处理文件。要还原原先的设置能够运行endlocal。如未显式运行,则会在批处理的最后自己主动隐性运行endlocal命令。

接下来这段脚本设置CATALINA_HOME环境变量,并终于确定catalina.bat的路径。如图3-2-1-1清晰表达了 CATALINA_HOME变量值确定的逻辑。

①假设系统变量设置了CATALINA_HOME。则直接使用系统变量设置的值作为tomcat安装文件夹。

②假如没设置系统变量CATALINA_HOME,则以批处理或命令行当前文件夹作为CATALINA_HOME。此时假设%CATALINA_HOME%\bin\catalina.bat存在。则批处理或命令行当前文件夹作为CATALINA_HOME。③假如%CATALINA_HOME%\bin\catalina.bat不存在,则把当前文件夹的上一级文件夹作为CATALINA_HOME,此时再推断%CATALINA_HOME%\bin\catalina.bat是否存在,存在则当前文件夹的上一级文件夹就是CATALINA_HOME。

否则提示找不到CATALINA_HOME环境变量。

对于②跟③的情况可能比較easy产生疑问。②主要针对用命令行运行,命令行的当前文件夹是tomcat安装文件夹,运行bin\startup.bat。③的情况可能是命令行运行,也可能是双击批处理运行。命令行运行是把当前文件夹切到tomcat安装文件夹\bin下,这两种运行方式的当前文件夹都是一样的。
********************************************************************************************
set "CURRENT_DIR=%cd%"
if not "%CATALINA_HOME%" == "" goto gotHome  
set "CATALINA_HOME=%CURRENT_DIR%"  
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome  
cd ..  
set "CATALINA_HOME=%cd%"  
cd "%CURRENT_DIR%"   
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome  
goto end
:okHome
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"   
if exist "%EXECUTABLE%" goto okExec   
goto end
:okExec
********************************************************************************************
 
图3-2-1-1
确定了CATALINA_HOME的值即已经确定了catalina.bat。

接下去是接受參数,在启动时常常会附带一些命令參数。startup.bat通过下面程序完毕对參数的收集。

********************************************************************************************
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs     
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1   //将參数组成一行,接在后面
shift
goto setArgs
:doneSetArgs
********************************************************************************************
首先把CMD_LINE_ARGS设置环境变量为空。首先推断第一个參数是否为空,为空则表示没有參数。直接跳到doneSetArgs位置,假设第一个參数不为空。则把第一个參数赋给CMD_LINE_ARGS,shift命令的作用是把參数前移一位。这时%1代表的就是原来第二个參数,shift后又跳到setArgs位置。此时推断的是第二个參数,假设不为空则把參数追加到CMD_LINE_ARGS。

以此类推。把參数一个个前移,直到%1为空,则表示全部參数都已经收集完。

call "%EXECUTABLE%" start %CMD_LINE_ARGS%,这条命令是把刚刚收集好的全部參数CMD_LINE_ARGS作为參数,调用运行catalina.bat批处理。

你可能感兴趣的文章
超级账本HyperLedger初体验
查看>>
四种方式主导你的第一个敏捷项目
查看>>
InfoQ就Spring Boot 2.0 GA版发布采访了项目牵头人Phil Webb
查看>>
Oracle开源Fn,加入Serverless之争
查看>>
美团即时物流的分布式系统架构设计
查看>>
微软发布.NET Core Tools 1.0版本
查看>>
PHP常用函数之字符串处理
查看>>
又拍云沈志华:如何打造一款安全的App
查看>>
Rust 1.27支持SIMD
查看>>
“10%时间”:优点和缺点——敏捷海滩会议上Elizabeth Pope的报告
查看>>
关于“Fluent UI”或Ribbon Design报道的补充说明
查看>>
2018年终盘点:“年度爆款”的区块链真的结束了吗?
查看>>
51信用卡 Android自动埋点实践
查看>>
敏捷现状10周年调查
查看>>
PHP Session可能会引起并发问题
查看>>
AI产品开发的核心原则:以研究为核心驱动
查看>>
大规模集群中Docker镜像如何分发管理?试试Uber刚开源的Kraken
查看>>
WinDocks发布Windows版本的Docker引擎
查看>>
完美解决html中select的option不能隐藏的问题。
查看>>
推荐5大开源工具,用于开发Kubernetes项目
查看>>