• tomcat启动批处理——startup.bat




    从文件命名上看就知道这是一个启动批处理。这个批处理的主要功能就是为了找到还有一个批处理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%incatalina.bat存在。则批处理或命令行当前文件夹作为CATALINA_HOME。③假如%CATALINA_HOME%incatalina.bat不存在,则把当前文件夹的上一级文件夹作为CATALINA_HOME,此时再推断%CATALINA_HOME%incatalina.bat是否存在,存在则当前文件夹的上一级文件夹就是CATALINA_HOME。

    否则提示找不到CATALINA_HOME环境变量。
    对于②跟③的情况可能比較easy产生疑问。②主要针对用命令行运行,命令行的当前文件夹是tomcat安装文件夹,运行binstartup.bat。③的情况可能是命令行运行,也可能是双击批处理运行。命令行运行是把当前文件夹切到tomcat安装文件夹in下,这两种运行方式的当前文件夹都是一样的。
    ********************************************************************************************
    set "CURRENT_DIR=%cd%"
    if not "%CATALINA_HOME%" == "" goto gotHome  
    set "CATALINA_HOME=%CURRENT_DIR%"  
    if exist "%CATALINA_HOME%incatalina.bat" goto okHome  
    cd ..  
    set "CATALINA_HOME=%cd%"  
    cd "%CURRENT_DIR%"   
    :gotHome
    if exist "%CATALINA_HOME%incatalina.bat" goto okHome  
    goto end
    :okHome
    set "EXECUTABLE=%CATALINA_HOME%incatalina.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批处理。


    点击订购作者《Tomcat内核设计剖析》




  • 相关阅读:
    python正则表达式(+ {})(二)
    14丨 HTTP有哪些优点?又有哪些缺点?
    python正则表达式(. *)(一)
    12丨响应状态码该怎么用?
    Fiddler—Fiddler+willow插件应用(十四)
    11丨你能写出正确的网址吗?
    【洛谷P1858】多人背包
    【洛谷P3387】(模板)缩点
    【洛谷P2184】贪婪大陆
    Leetcode: 39. Combination Sum
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6935041.html
Copyright © 2020-2023  润新知