您当前的位置:首页 > 计算机 > 编程开发 > DOS/BAT与(脚本)

windows下tomcat8启动脚本代码剖析--startup.bat

时间:04-14来源:作者:点击数:

Windows下,Tomcat可以以服务形式启动、停止,也可以执行脚本启动(startup.bat)、停止(shutdown.bat)。执行startup.bat时会调用catalina.bat,catalina.bat脚本又会调用setclasspath.bat进行java class path指定。本文将剖析startup.bat的代码实现。

1、tomcat版本及安装目录

版本:8.0.36

安装目录:E:\tomcat8

2、startup.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
3、代码说明

以每行注释方式,说明每行代码作用,并移除原代码中的所有rem注释。

rem 关闭回显
@echo off

rem 开启局部变量
setlocal

rem 设置CURRENT_DIR为当前目录,本例为e:\tomcat8
set "CURRENT_DIR=%cd%"

rem 如果CATALINA_HOME非空,执行gotHome
if not "%CATALINA_HOME%" == "" goto gotHome

rem CATALINA_HOME为空,则设置CATALINA_HOM=CURRENT_DIR,本例为e:\tomcat8
set "CATALINA_HOME=%CURRENT_DIR%"

rem 如果存在catalina.bat文件,执行okHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome

rem 如果不存在catalina.bat文件,则返回上级目录
cd ..

rem 变量赋值
set "CATALINA_HOME=%cd%"

rem 进入CURRENT_DIR目录
cd "%CURRENT_DIR%"

:gotHome
rem 如果bat文件存在执行okHome,否则输出错误信息,结束脚本。
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
rem 变量赋值
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"

rem "%EXECUTABLE%"存在则执行okExec,本例为e:\tomcat8\bin\catalina.bat;不存在则报错并结束脚本
if exist "%EXECUTABLE%" goto okExec
echo Cannot find "%EXECUTABLE%"
echo This file is needed to run this program
goto end

:okExec
set CMD_LINE_ARGS=

rem 参数拼接,保留startup.bat传入的参数;
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs

rem 调用catalina.bat start 拼接startup.bat 传入的参数
rem 如startup.bat arg1 arg2,则catalina.bat start arg1 arg2
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
:end

整个startup.bat脚本最核心代码就是调用catalina脚本,实际场景类似:

call E:\tomcat8\bin\catalina.bat start
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门