源计划--Tomcat计划(一)

本文详细解析了Tomcat的启动脚本startup.bat的工作原理,包括如何设置CATALINA_HOME环境变量,以及如何通过该脚本调用catalina.bat来启动Tomcat服务器。

startup.bat 分析–Tomcat的入口脚本
我的Tomcat安装路径是:D:\tomcat-res-project\apache-tomcat-8.5.5-src

starup.bat内容

@echo off
rem Licensed to the Apache Software Foundation (ASF) under one or more
rem contributor license agreements.  See the NOTICE file distributed with
rem this work for additional information regarding copyright ownership.
rem The ASF licenses this file to You under the Apache License, Version 2.0
rem (the "License"); you may not use this file except in compliance with
rem the License.  You may obtain a copy of the License at
rem
rem     http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.

rem ---------------------------------------------------------------------------
rem Start script for the CATALINA Server
rem ---------------------------------------------------------------------------

setlocal

rem Guess CATALINA_HOME if not defined
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
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome

set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"

rem Check that target executable exists
if exist "%EXECUTABLE%" goto okExec
echo Cannot find "%EXECUTABLE%"
echo This file is needed to run this program
goto end
:okExec

rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs

call "%EXECUTABLE%" start %CMD_LINE_ARGS%

:end
rem Guess CATALINA_HOME if not defined
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
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"

这一段主要是设置系统变量CATALINA_HOME.

set “CURRENT_DIR=%cd%”设置CURRENT_DIR为当前目录,由于startup.bat是在D:\tomcat-res-project\apache-tomcat-8.5.5-src\bin下的,所以CURRENT_DIR=D:\tomcat-res-project\apache-tomcat-8.5.5-src\bin

if not “%CATALINA_HOME%” == “” goto gotHome
set “CATALINA_HOME=%CURRENT_DIR%”
如果CATALINA_HOME变量非空跳转到gotHome,否则将CURRENT_DIR 的值赋给CATALINA_HOME,因为我们一般是不设置环境变量CATALINA_HOME,所以if not “%CATALINA_HOME%” == “”一般是返回false的,所以会执行set “CATALINA_HOME=%CURRENT_DIR%”

if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
cd ..
set "CATALINA_HOME=%cd%"
cd "%CURRENT_DIR%"

如果存在%CATALINA_HOME%\bin\catalina.bat那么跳转到okHome,因为之前设置过CURRENT_DIR,所以%CATALINA_HOME%\bin\catalina.bat等同于D:\tomcat-res-project\apache-tomcat-8.5.5-src\bin\bin\catalina.bat,因此此判断是返回false的。
接着执行cd..,这很容易理解,就是进入上一层目录,因此此时%cd%为D:\tomcat-res-project\apache-tomcat-8.5.5-src,执行set “CATALINA_HOME=%cd%”之后,CATALINA_HOME的值为D:\tomcat-res-project\apache-tomcat-8.5.5-src

:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"

gotHome判断catalina.bat存在性,不存在就退出脚本
okHome设置变量EXECUTABLE

rem Check that target executable exists
if exist "%EXECUTABLE%" goto okExec
echo Cannot find "%EXECUTABLE%"
echo This file is needed to run this program
goto end

:okExec
rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs

call "%EXECUTABLE%" start %CMD_LINE_ARGS%

:end

这一段是判断变量EXECUTABLE的存在性,存在则跳转到okExec,不存在则输出提示信息然后退出脚本
oKExec主要是读取命令参数,空参数则跳转到doneSetArgs,非空参数则保存参数到CMD_LINE_ARGS变量中
doneSetArgs执行EXECUTABLE ,实际是上就是调用catalina.bat并附带start参数或者%CMD_LINE_ARGS%所代表的参数

总的来说startup.bat就是找到catalina.bat并调用它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值