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%\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的更多相关文章
- [Tomcat 源码分析系列] (一) : Tomcat 启动脚本-startup.bat
概述 我们通常使用 Tomcat 中的 startup.bat 来启动 Tomcat. 但是这其中干了一些什么事呢? 大家都知道一个 Java 程序需要启动的话, 肯定需要 main 方法, 那么这个 ...
- tomcat启动批处理——catalina.bat
这个批处理才是tomcat服务器启动跟关闭的核心脚本.其中包括....(各种变量),此节将详细讲解这个批处理的逻辑. 先看看第一部分脚本: ****************************** ...
- tomcat启动(一)startup.bat|catalina.bat分析
环境:windows X64位 Tomcat8.0.47 bootstrap.jar是tomcat的内核 开始位置 startup.bat 查看文本 具体的批处理脚本语法可以查看我整理的文章 http ...
- tomcat启动批处理——setclasspath.bat
除了上面两个批处理,还有一个比较重要的脚本,即是setclasspath.bat,它主要负责寻找.检查JAVA_HOME和JRE_HOME两个变量. ************************* ...
- windows 同时启动多个Tomcat 控制台日志(startup.bat)输出到指定文件中
1 .修改startup.bat第42行 call "%EXECUTABLE%" start %CMD_LINE_ARGS% 为 call "%EXECUTABLE%&q ...
- myeclipse能启动tomcat但是用startup.bat无法启动
myeclipse能启动tomcat但是用startup.bat无法启动 这个问题困扰了我一天,把一天的周末时间白白花费了.各种百度,各种尝试都没办法解决.在江湖上闯,难道就只有百度一招吗? 不是,我 ...
- tomcat点击startup.bat出现闪退,启动不成功的解决办法
问题描述:tomcat点击startup.bat出现命令行闪退的情况 打开startup.bat,在第一行加入 SET JAVA_HOME=D:\jdk\jdk1.8.0_121[jdk路径] SET ...
- [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat
概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...
- 直接双击启动tomcat中的startup.bat闪退原因及解决方法
免安装的tomcat双击startup.bat后,启动窗口一闪而过,而且tomcat服务未启动. 原因是:在启动tomcat是,需要读取环境变量和配置信息,缺少了这些信息,就不能登记环境变量,导致了t ...
随机推荐
- C#中string的相关方法
下面的方法一般都有很多重载形式,作为初学者的我先把我用过的记录下来吧...以后用到其他的可以一点点添加: 直接上例子吧.先定义两个字符串str1,str2(不要吐槽命名==) string str1, ...
- JavaScript数组操作总结
以前特别相信自己的大脑,后来,再也不相信了!大脑是虚无的,重要的东西一定要让它有一个物质的具体的副本.事无巨细! 1.创建数组: new Array(); new Array(size); new A ...
- SpringIOC学习三
基于注解的注入:就是用注解标签的方式替换掉我们xml配置文件里面bean的注册和依赖关系的描述 a:首先回顾IOC(控制反转),进行依赖注入需要做到两件事情: 1:注册类 2:描 ...
- Android Studio安装、配置、第一个程序的那些坑
最近在上Android课,老师布置了量大题难的作业,然而出师未捷身先死,还没看题目,就被Android Studio的安装和环境配置搞得要死要死的,网上的教程也多也杂,良莠不齐,在经历了5小时通过的搜 ...
- [USACO17FEB]Why Did the Cow Cross the Road II S
题目描述 The long road through Farmer John's farm has crosswalks across it, conveniently numbered (). ...
- 【luogu P4005 清华集训2017】小Y和地铁
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...
- 【QAQ的Minecraft】
树套树被QAQ用木斧挖了,只剩二维RMQ了. 题目: QAQ最近爱上了一款很平凡的游戏,叫做<Minecraft>.目前游戏更新到了1.12版本,他发现了一条新的指令:/fill ...
- A Problem-Solving FlowChart || 如何解决编程问题
This is from book Cracking the coding interview, Gayle Laakmann Mcdowell. The flowchart can be used ...
- 求n的阶乘
import java.util.Scanner; public class J { public static void main(String args[]) { //注释:int n=6 ...
- js将当前时间格式化为年-月-日 时:分:秒
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...