从文件命名上看就知道这是一个启动批处理,这个批处理的主要功能就是为了找到另一个批处理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环境变量。

对于②跟③的情况可能比较容易产生疑问,②主要针对用命令行执行,命令行的当前目录是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批处理。

喜欢研究java的同学可以交个朋友,下面是本人的微信号:

tomcat启动批处理——startup.bat的更多相关文章

  1. [Tomcat 源码分析系列] (一) : Tomcat 启动脚本-startup.bat

    概述 我们通常使用 Tomcat 中的 startup.bat 来启动 Tomcat. 但是这其中干了一些什么事呢? 大家都知道一个 Java 程序需要启动的话, 肯定需要 main 方法, 那么这个 ...

  2. tomcat启动批处理——catalina.bat

    这个批处理才是tomcat服务器启动跟关闭的核心脚本.其中包括....(各种变量),此节将详细讲解这个批处理的逻辑. 先看看第一部分脚本: ****************************** ...

  3. tomcat启动(一)startup.bat|catalina.bat分析

    环境:windows X64位 Tomcat8.0.47 bootstrap.jar是tomcat的内核 开始位置 startup.bat 查看文本 具体的批处理脚本语法可以查看我整理的文章 http ...

  4. tomcat启动批处理——setclasspath.bat

    除了上面两个批处理,还有一个比较重要的脚本,即是setclasspath.bat,它主要负责寻找.检查JAVA_HOME和JRE_HOME两个变量. ************************* ...

  5. windows 同时启动多个Tomcat 控制台日志(startup.bat)输出到指定文件中

    1 .修改startup.bat第42行 call "%EXECUTABLE%" start %CMD_LINE_ARGS% 为 call "%EXECUTABLE%&q ...

  6. myeclipse能启动tomcat但是用startup.bat无法启动

    myeclipse能启动tomcat但是用startup.bat无法启动 这个问题困扰了我一天,把一天的周末时间白白花费了.各种百度,各种尝试都没办法解决.在江湖上闯,难道就只有百度一招吗? 不是,我 ...

  7. tomcat点击startup.bat出现闪退,启动不成功的解决办法

    问题描述:tomcat点击startup.bat出现命令行闪退的情况 打开startup.bat,在第一行加入 SET JAVA_HOME=D:\jdk\jdk1.8.0_121[jdk路径] SET ...

  8. [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat

    概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...

  9. 直接双击启动tomcat中的startup.bat闪退原因及解决方法

    免安装的tomcat双击startup.bat后,启动窗口一闪而过,而且tomcat服务未启动. 原因是:在启动tomcat是,需要读取环境变量和配置信息,缺少了这些信息,就不能登记环境变量,导致了t ...

随机推荐

  1. 【Swift】图文混排,ios开发中在textfield或textView中插入图片

    在ios开发中,我们一般都是在textfield或者textView中输入文字.当我们需要插入图片的时候其实也是很简单的 我们需要利用的textfield,textView的属性化文本,将图片以附件的 ...

  2. 使用脚本删除hive分区中的问题(expecting KW_EXCHANGE near mytable in alter exchange partition)

  3. 每天记录一点:NetCore获得配置文件 appsettings.json

    用NetCore做项目如果用EF  ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如SqlSugar,NH,Dapper等,在读取连接字符串的时候,往往把信息保存到一 ...

  4. [HNOI 2010]chorus 合唱队

    Description 题库链接 对于一个包含 \(N\) 个整数的数列 \(A\) ,我们可以把它的所有元素加入一个双头队列 \(B\) . 首先 \(A_1\) 作为队列的唯一元素,然后依次加入 ...

  5. [USACO 13NOV]No Change

    Description Farmer John is at the market to purchase supplies for his farm. He has in his pocket K c ...

  6. [USACO 08JAN]Haybale Guessing

    Description The cows, who always have an inferiority complex about their intelligence, have a new gu ...

  7. 51 nod 1681 公共祖先 (主席树+dfs序)

    1681 公共祖先 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   有一个庞大的家族,共n人.已知这n个人的祖辈关系正好形成树形结构(即父亲向儿子连边). 在另 ...

  8. Linux学习之CentOS(二)--初识linux的一些常用命令(基础命令)

    初次学习linux系统,首先也得会一些linux的基本命令.至少要先学会开启和关闭系统吧!我称为 基础命令! linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器. ...

  9. 浏览器控制台调试json数据

    var str ='{"code":0,"message":"","systemTime":"2017-10- ...

  10. ASP.NET Core部署到Windows IIS

    网上已经有许多ASP.NET Core关于Widows IIS部署的文章,在部署到服务器时遇到了一些问题,在这里我就不再对原理进行阐释(复制)了,只写下一些关键环节,想看原理的同学请参考官网,此文章作 ...