Parse the Tomcat startup script startup.bat
- 2020-05-30 21:24:25
An overview of the
We usually use startup. bat in Tomcat to start Tomcat. But what does this do?
You all know that if an Java program needs to be started, it definitely needs the main method, so where is the main method?
What parameters are configured in the Tomcat script, and when will Tomcat fail to start?
Let's take a look at Tomcat's three most important startup scripts with a list of questions:startup.bat catalina.bat setclasspath.bat
startup bat script
The script does the following things:Set the value of the CATALINA_HOME environment variable Find the catalina.bat script Call the catalina.bat script and pass the arguments
Post the content of the simplified version of the startup.bat script
@echo off rem After executing this command , Environment variables are added or changed only if they match to endlocal Command or go to the end of the file . setlocal rem Assuming that CATALINA_HOME Environment variables are not defined rem Takes the path value of the current directory , Assigned to CURRENT_DIR variable , is ./apache-tomcat-x.x.xx/bin set "CURRENT_DIR=%cd%" rem if CATALINA_HOME The variable value is not "" if , Transferred to the gotHome Labels place if not "%CATALINA_HOME%" == "" goto gotHome rem if CATALINA_HOME is "" if , Set up the CATALINA_HOME A variable's value to The path value of the current directory (./apache-tomcat-x.x.xx/bin) set "CATALINA_HOME=%CURRENT_DIR%" rem Determine if there are any in the current path bin\catalina.bat, That is ./apache-tomcat-x.x.xx/bin/bin/catalina.bat rem If it exists , Directly transferred to the okHome Labels place , Obviously it doesn't exist if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome rem If it doesn't exist , CATALINA_HOME Takes the value of the parent directory , That is (./apache-tomcat-x.x.xx/) cd .. set "CATALINA_HOME=%cd%" rem Enter the CURRENT_DIR(./apache-tomcat-x.x.xx/bin) cd "%CURRENT_DIR%" :gotHome rem Go through the Settings above , CATALINA_HOME The value of theta is already zero : ./apache-tomcat-x.x.xx/ rem So the collation can be found catalina.bat The script , Directly transferred to the okHome Labels place 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 up the EXECUTABLE The variable points to catalina.bat The script set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat" rem Check the target executable (catalina.bat) If there is a , Usually it does , Directly transferred to the okExec Labels place rem If it doesn't exist , Directly out of . Start the Tomcat The end of the if exist "%EXECUTABLE%" goto okExec echo Cannot find "%EXECUTABLE%" echo This file is needed to run this program goto end :okExec rem It's no use getting the rest shift The command line argument that is fetched , And save them in CMD_LINE_ARGS set CMD_LINE_ARGS= :setArgs rem If the first 1 Three command line arguments are empty , Jump to the doneSetArgs Labels place rem "%1" : Represents the first after the execution of the command 1 A parameter if ""%1""=="""" goto doneSetArgs rem The first 1 If the parameter is not empty , Joining together to CMD_LINE_ARGS variable set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 rem This command can be baidu shift goto setArgs :doneSetArgs rem It's set up EXECUTABLE The value of the variable is pointing catalina.bat The script , The use of call Command execution call , And pass in the parameters rem The following , Let's see catalina.bat Script content rem Complete command : ./apache-tomcat-x.x.xx/bin/catalina.bat start call "%EXECUTABLE%" start %CMD_LINE_ARGS% :end
To understand some of the commands in the script, take a look at the following common commands (Window we used)rem: the code after this command will not be executed, equivalent to a comment echo off: turn off the display of commands. If not set, any commands executed will be displayed echo: outputs what follows setlocal: after executing this command, the scope of environment variables added or changed is limited to matching the endlocal command or reaching the end of the file. set: sets 1 variable :xxx: define 1 tag goto: jump to the designated label call: execute the command
Let's take a one-line look at the startup.bat script
%cd% : represents the path to the directory where the file is located
If we extracted Tomcat directory for D: / apache - tomcat - x. x. x /. Because startup. bat command in bin directory, so the % % cd said directory is D: / apache - tomcat - x. x. x/bin
if not "%CATALINA_HOME%" == "" goto gotHome
We don't normally configure the CATALINA_HOME environment variable, so we won't go to the gotHome TAB.
Directly assume the current directory to be the value of CATALINA_HOME
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
Then fixed format to determine whether one have catalina bat script, of course, this is will not exist, because CATALINA_HOME = D: / apache - tomcat - x. x. x/bin
cd .. set "CATALINA_HOME=%cd%"
Because the Tomcat directory format is fixed, here you go directly to the parent directory (cd..) , and then set the value of CATALINA_HOME to the parent directory (D:/ apache-tomcat-x.x.x).
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
If we unzip Tomcat and put startup.bat in the bin directory that is not Tomcat, we can't find it here, so we can directly goto end and exit the startup of Tomcat.
Ok, so here we go straight to the okHome TAB.
:okHome set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
Ok, it's easy to set the value of the 1 EXECUTABLE variable to point to the catalina.bat script.
if exist "%EXECUTABLE%" goto okExec echo Cannot find "%EXECUTABLE%" echo This file is needed to run this program goto end
Once again, I checked whether this script exists or not. If it does, I will directly transfer it to the okExec label and it can be executed.
If it does not pass the check, exit the boot and print an error message.
:okExec set CMD_LINE_ARGS= :setArgs if ""%1""=="""" goto doneSetArgs set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 shift goto setArgs
A variable CMD_LINE_ARGS is set, and its value is temporarily empty
There appeared a "" % 1" = = "" "" "", open it to see is whether" % 1 "is equal to". "well, what does" % 1 "is the & # 63;
This is a syntax for the window batch, which is the first argument after the command is executed. For this case, we did not pass any arguments, so the '%1' is' "(empty).
Jump directly to the doneSetArgs label.
If it's not empty, put it in the back.
The shift command in this case means to remove one parameter. For example:
@echo off echo "%1" shift echo "%1"
Build an test.bat batch, copy the above code in, execute it in cmd and give it two parameters
Here is the result of the execution, where you can remove @echo off and execute it to verify that the command 1 is working
PS D:\> .\test Hello World "Hello" "World" PS D:\>
So that should make sense to you.
Continue to analyze
:doneSetArgs call "%EXECUTABLE%" start %CMD_LINE_ARGS% :end
EXECUTABLE = %CATALINA_HOME%\bin\ catalina.bat is set above, so the script catalina.bat is actually called, and an start parameter is passed to it.
If we run startup.bat in cmd and we have a parameter of 1, then 1 is passed.
This is actually done: %CATALINA_HOME%\bin\ catalina.bat start
The purpose of this script is to find catalina.bat and call it.
The above is the whole content of this article, I hope the content of this article can bring you a certain help in your study or work, the next article will continue to introduce Tomcat related knowledge -- "parsing Tomcat's startup script --catalina.bat", interested friends can read it