注:本系列学习笔记都是从其他人的分析中得出的知识,大多数属于复制,不属于原创,仅供学习参考。
/**
@echo off //关闭批处理的回显功能,加@是让当前行也不进行回显
if "%OS%" =="Windows_NT" setlocal
这里写代码片获取变量OS的值,判断是否为指定字符串。批处理中使用一个变量使用%变量名%符号。setlocal和endlocal命令执行结果是让中间的程序对于系统变量的改变只在程序内起作用,不会影响整个系统级别
*/
set"CURRENT_DIR=%cd%"
if not"%CATALINA_HOME%" == "" goto gotHome
set"CATALINA_HOME=%CURRENT_DIR%"
/**
将当前文件执行所在目录赋值给变量CURRENT_DIR,如果变量CATALINA_HOME不为空,跳转到gotHome标记处,否则向下执行,CATALINA_HOME设置为当前目录,一般情况下当前目录都是TOMCAT_HOME\bin。
*/
if exist"%CATALINA_HOME%\bin\catalina.bat" goto okHome
cd ..
set"CATALINA_HOME=%cd%"
cd"%CURRENT_DIR%"
:gotHome
/**
判断指定目录(安装目录)下的catalina.bat文件是否存在,存在了跳转到标记okHome处。否则向下执行。因为CATALINA_HOME的实际路径一般为当前目录(当前目录一般是在TOMCAT_HOME\bin下),此处又加了一个\bin,所以一般批处理会继续向下执行。这点要注意。向下执行会调用cd..,向上走一个目录,然后将目录路径赋值给CATALINA_HOME变量。然后再重新进入TOMCAT_HOME\bin的目录下(因为CURRENT_DIR在前面保存了这个路径)。此时CATALINA_HOME的路径才是真正的不包含bin目录的路径。: gotHome是一个标记,用来做跳转用
*/
//此时下面的判断是正确的,会跳转到okHome处。不正确就结束TOMCAT启动
if exist"%CATALINA_HOME%\bin\catalina.bat" goto okHome
goto end
:okHome
//将catalina.bat的路径赋值给EXECUTABLE,并检查是否存在
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
if exist"%EXECUTABLE%" goto okExec
echo Cannot find"%EXECUTABLE%"
echo This file is needed torun this program
goto end
:okExec
/**获取命令行参数。这里通过goto人为制造了一个循环,直到获得的参数为空为止。Shift是将第一个参数移除,后面的参数会向前移动,这个每次循环只需要获得第一个,就可以取得所有的参数。*/
set CMD_LINE_ARGS=
:setArgs
if""%1""=="""" goto doneSetArgs
setCMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs
/**
组合好参数后,通过call命令调用catalina.bat启动脚本,并传递参数。注意传递的还有一个start参数。这个后面 再说
call "%EXECUTABLE%"start %CMD_LINE_ARGS%
*/
:end
catalina.bat
在上一篇startup.bat的介绍中,我们在脚本的最后看到它调用了catalina.bat脚本,本篇就对catalina.bat脚本从头到尾的过一下,看看它到底干了什么?此处就只对重要或不太容易看懂的地方对脚本进行注释。
rem 下面这段脚本主要就是设置当前目录变量,检查catalina.bat在指定目录下是否存在
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
rem 下面这段脚本主要就是设检查setclasspath.bat脚本是否存在,并调用setclasspath.bat,检查JDK或JRE的配置。批处理中正确执行返回的errorlevel都是0,如果setclasspath.bat返回1说明调用失败
set CLASSPATH=
if “%CATALINA_BASE%” == “” gotogotSetenvHome
if exist “%CATALINA_BASE%\bin\setenv.bat”call “%CATALINA_BASE%\bin\setenv.bat”
goto gotSetenvBase
:gotSetenvHome
if exist “%CATALINA_HOME%\bin\setenv.bat”call “%CATALINA_HOME%\bin\setenv.bat”
:gotSetenvBase
if exist”%CATALINA_HOME%\bin\setclasspath.bat” goto okSetclasspath
echo Cannot find”%CATALINA_HOME%\bin\setclasspath.bat”
echo This file is needed to run this program
goto end
:okSetclasspath
set “BASEDIR=%CATALINA_HOME%”
call “%CATALINA_HOME%\bin\setclasspath.bat”%1
if errorlevel 1 goto end
rem 下面这段脚本主要作用就是将要调用的Tomcat的JAR类文件加入到环境变量中,特别是bootstrap.jar。
if “%CLASSPATH%” == “” gotoemptyClasspath
set “CLASSPATH=%CLASSPATH%;”
:emptyClasspath
if “%CATALINA_BASE%” ==”%CATALINA_HOME%” goto juliClasspathHome
if not exist”%CATALINA_BASE%\bin\tomcat-juli.jar” goto juliClasspathHome
set”CLASSPATH=%CLASSPATH%%CATALINA_BASE%\bin\tomcat-juli.jar;%CATALINA_HOME%\bin\bootstrap.jar”
goto juliClasspathDone
:juliClasspathHome
set “CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar”
:juliClasspathDone
rem 设置JAVA虚拟机将要用到的参数信息
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%
rem 判断第一个参数是不是start,是的话跳转到doStart.如果回头去看看startup.bat,可以看到里面确实传递了一个名为start的参数。
if “”%1”” ==”“start”” goto doStart
rem 设置Tomcat启动时的名称,要调用的Java命令等。这些变量是在setclasspath.bat中进行了设置。
:doStart
shift
if not “%OS%” == “Windows_NT” gotonoTitle
if “%TITLE%” == “” setTITLE=Tomcat
set _EXECJAVA=start “%TITLE%” %_RUNJAVA%
goto gotTitle
:noTitle
set _EXECJAVA=start %_RUNJAVA%
:gotTitle
if not “”%1”” ==”“-security”” goto execCmd
shift
echo Using Security Manager
set”SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy”
goto execCmd
rem 设置参数
:execCmd
rem Get remaining unshifted command line arguments andsave them in the
set CMD_LINE_ARGS=
:setArgs
if”“%1”“==”“”” goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs
rem 最终通过JAVA命令调用启动Tomcat,其中%ACTION%指定了Tomcat的org. apache.catalina.startup.Bootstrap类。
rem Execute Java with the applicable properties
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS%-Djava.endorsed.dirs=”%JAVA_ENDORSED_DIRS%” -classpath”%CLASSPATH%” -Dcatalina.base=”%CATALINA_BASE%”-Dcatalina.home=”%CATALINA_HOME%”-Djava.io.tmpdir=”%CATALINA_TMPDIR%” %MAINCLASS% %CMD_LINE_ARGS%%ACTION%
JAVA命令调用的信息可以使用echo命令将调用字符串回显出来.如下图:
可以看到确实调用了Tomcat的启动类bootstrap
通过以上内容,我们也可以了解到,当我们需要增大Tomcat的虚拟内存时,就可以在catalina.bat中进行配置。只要在文件的开头处增加set JAVA_OPTS=-Xms512m -Xmx512m即可,具体大小根据实际进行配置。