概述
我们通常使用 Tomcat 中的 startup.bat 来启动 Tomcat. 但是这其中干了一些什么事呢?
大家都知道一个 Java 程序需要启动的话, 肯定需要 main 方法, 那么这个 main 方法在哪呢?
Tomcat 脚本中又是配置了一些什么参数呢, 什么情况下 Tomcat 会启动失败呢?
带着一些列的疑问我们来分析 Tomcat 的三个最重要的启动脚本:
- startup.bat
- catalina.bat
- setclasspath.bat
startup.bat 脚本
该脚本主要做了以下几件事:
- 设置 CATALINA_HOME 环境变量的值
- 找到 catalina.bat 脚本
- 调用 catalina.bat 脚本, 并把参数传过去
贴出简化版本的 startup.bat 脚本的内容
@echo offrem 执行这个命令之后, 增加或者改动的环境变量只限于匹配到 endlocal 命令或者到达文件末尾.setlocalrem 假设 CATALINA_HOME 环境变量没有定义rem 取当前目录的路径值, 赋给 CURRENT_DIR 变量, 就是 ./apache-tomcat-x.x.xx/binset "CURRENT_DIR=%cd%"rem 如果 CATALINA_HOME 变量值不是 "" 的话, 调到 gotHome 标签处if not "%CATALINA_HOME%" == "" goto gotHomerem 如果 CATALINA_HOME 是 "" 的话, 设置 CATALINA_HOME 变量值为 当前目录的路径值(./apache-tomcat-x.x.xx/bin)set "CATALINA_HOME=%CURRENT_DIR%"rem 判断当前路径下的是否有 bin/catalina.bat, 也就是 ./apache-tomcat-x.x.xx/bin/bin/catalina.batrem 如果存在的话, 直接调到 okHome 标签处, 显然是不存在的if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHomerem 不存在的话, CATALINA_HOME 取上级目录的值, 也就是(./apache-tomcat-x.x.xx/)cd ..set "CATALINA_HOME=%cd%"rem 进入 CURRENT_DIR(./apache-tomcat-x.x.xx/bin)cd "%CURRENT_DIR%":gotHomerem 通过上面的设置, CATALINA_HOME 的值已经是: ./apache-tomcat-x.x.xx/rem 所以整理是可以找到 catalina.bat 脚本的, 直接调到 okHome 标签处if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHomeecho The CATALINA_HOME environment variable is not defined correctlyecho This environment variable is needed to run this programgoto end:okHomerem 设置 EXECUTABLE 变量指向为 catalina.bat 脚本set "EXECUTABLE=%CATALINA_HOME%/bin/catalina.bat"rem 检查目标可执行文件(catalina.bat)是否存在, 通常情况下是存在的, 直接调到 okExec 标签处rem 如果不存在的话, 直接退出. 启动 Tomcat 结束if exist "%EXECUTABLE%" goto okExececho Cannot find "%EXECUTABLE%"echo This file is needed to run this programgoto end:okExecrem 获取剩余的没有用 shift 取出来的命令行参数, 并保存它们在 CMD_LINE_ARGSset CMD_LINE_ARGS=:setArgsrem 如果第一个命令行参数是空的话, 跳到 doneSetArgs 标签处rem "%1" : 表示执行命令之后的第一个参数if ""%1""=="""" goto doneSetArgsrem 第一个参数不是空的话, 拼接到 CMD_LINE_ARGS 变量set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1rem 这个命令可以自行百度shiftgoto setArgs:doneSetArgsrem 上面设置了 EXECUTABLE 变量的值是指向了 catalina.bat 脚本, 这个利用 call 命令执行调用, 并把参数传进去rem 接下来, 咱们看 catalina.bat 脚本的内容rem 完整的命令: ./apache-tomcat-x.x.xx/bin/catalina.bat startcall "%EXECUTABLE%" start %CMD_LINE_ARGS%:end
评论列表()