в предыдущей статье«Создание среды выполнения исходного кода»Он запускается прямым запуском основной функции BootStarp, но добавляется системное свойство catalina.home. В нормальных условиях Tomcat запускается запуском сценария, который включает набор файлов сценариев в каталоге сценариев, скопированном при создании проекта.
Взяв в качестве примера мою систему Windows, пакетный файл startup.bat фактически выполняется для запуска tomcat. Затем запустите анализ и начните с этого файла:1. Проанализируйте файл startup.bat
startup.bat :
1 @echo off
2 rem Licensed to the Apache Software Foundation (ASF) under one or more
3 rem contributor license agreements. See the NOTICE file distributed with
4 rem this work for additional information regarding copyright ownership.
5 rem The ASF licenses this file to You under the Apache License, Version 2.0
6 rem (the "License"); you may not use this file except in compliance with
7 rem the License. You may obtain a copy of the License at
8 rem
9 rem http://www.apache.org/licenses/LICENSE-2.0
10 rem
11 rem Unless required by applicable law or agreed to in writing, software
12 rem distributed under the License is distributed on an "AS IS" BASIS,
13 rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 rem See the License for the specific language governing permissions and
15 rem limitations under the License.
16
17 if "%OS%" == "Windows_NT" setlocal
18 rem ---------------------------------------------------------------------------
19 rem Start script for the CATALINA Server
20 rem
21 rem $Id: startup.bat 895392 2010-01-03 14:02:31Z kkolinko $
22 rem ---------------------------------------------------------------------------
23
24 rem Guess CATALINA_HOME if not defined
25 set "CURRENT_DIR=%cd%"
26 if not "%CATALINA_HOME%" == "" goto gotHome
27 set "CATALINA_HOME=%CURRENT_DIR%"
28 if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
29 cd ..
30 set "CATALINA_HOME=%cd%"
31 cd "%CURRENT_DIR%"
32 :gotHome
33 if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
34 echo The CATALINA_HOME environment variable is not defined correctly
35 echo This environment variable is needed to run this program
36 goto end
37 :okHome
38
39 set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
40
41 rem Check that target executable exists
42 if exist "%EXECUTABLE%" goto okExec
43 echo Cannot find "%EXECUTABLE%"
44 echo This file is needed to run this program
45 goto end
46 :okExec
47
48 rem Get remaining unshifted command line arguments and save them in the
49 set CMD_LINE_ARGS=
50 :setArgs
51 if ""%1""=="""" goto doneSetArgs
52 set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
53 shift
54 goto setArgs
55 :doneSetArgs
56
57 call "%EXECUTABLE%" start %CMD_LINE_ARGS%
58
59 :end
линия 1@echo off
это отключить смысл отображения самой командной строки, то много рем это комментарии, строка 17if "%OS%" == "Windows_NT" setlocal
Это временное изменение системных переменных для облегчения пакетной обработки. Строки с 26 по 33 используются для установкиCATALINA_HOME
Если переменная среды не установлена в операционной системе, каталог, в котором в данный момент выполняется скрипт, будет использоваться в качестве значения переменной среды, и в конечном итоге произойдет переход к строке 37. от 39 до 46 строк проверкиCATALINA_HOME
Независимо от того, существует ли файл catalina.bat в каталоге, указанном переменной, пакетный процесс завершается напрямую. Строки с 48 по 55 сохранят параметры вCMD_LINE_ARGS
в переменной. Наконец, пакетный файл catalina.bat выполняется в строке 57. Обратите внимание, что за этой строкой следуют два параметра, первый параметр — start.
Во-вторых, проанализируйте файл catalina.bat.
1 @echo off
2 rem Licensed to the Apache Software Foundation (ASF) under one or more
3 rem contributor license agreements. See the NOTICE file distributed with
4 rem this work for additional information regarding copyright ownership.
5 rem The ASF licenses this file to You under the Apache License, Version 2.0
6 rem (the "License"); you may not use this file except in compliance with
7 rem the License. You may obtain a copy of the License at
8 rem
9 rem http://www.apache.org/licenses/LICENSE-2.0
10 rem
11 rem Unless required by applicable law or agreed to in writing, software
12 rem distributed under the License is distributed on an "AS IS" BASIS,
13 rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 rem See the License for the specific language governing permissions and
15 rem limitations under the License.
16
17 if "%OS%" == "Windows_NT" setlocal
18 rem ---------------------------------------------------------------------------
19 rem Start/Stop Script for the CATALINA Server
20 rem
21 rem Environment Variable Prerequisites
22 rem
23 rem Do not set the variables in this script. Instead put them into a script
24 rem setenv.bat in CATALINA_BASE/bin to keep your customizations separate.
25 rem
26 rem CATALINA_HOME May point at your Catalina "build" directory.
27 rem
28 rem CATALINA_BASE (Optional) Base directory for resolving dynamic portions
29 rem of a Catalina installation. If not present, resolves to
30 rem the same directory that CATALINA_HOME points to.
31 rem
32 rem CATALINA_OPTS (Optional) Java runtime options used when the "start",
33 rem "run" or "debug" command is executed.
34 rem Include here and not in JAVA_OPTS all options, that should
35 rem only be used by Tomcat itself, not by the stop process,
36 rem the version command etc.
37 rem Examples are heap size, GC logging, JMX ports etc.
38 rem
39 rem CATALINA_TMPDIR (Optional) Directory path location of temporary directory
40 rem the JVM should use (java.io.tmpdir). Defaults to
41 rem %CATALINA_BASE%\temp.
42 rem
43 rem JAVA_HOME Must point at your Java Development Kit installation.
44 rem Required to run the with the "debug" argument.
45 rem
46 rem JRE_HOME Must point at your Java Runtime installation.
47 rem Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
48 rem are both set, JRE_HOME is used.
49 rem
50 rem JAVA_OPTS (Optional) Java runtime options used when any command
51 rem is executed.
52 rem Include here and not in CATALINA_OPTS all options, that
53 rem should be used by Tomcat and also by the stop process,
54 rem the version command etc.
55 rem Most options should go into CATALINA_OPTS.
56 rem
57 rem JAVA_ENDORSED_DIRS (Optional) Lists of of semi-colon separated directories
58 rem containing some jars in order to allow replacement of APIs
59 rem created outside of the JCP (i.e. DOM and SAX from W3C).
60 rem It can also be used to update the XML parser implementation.
61 rem Defaults to $CATALINA_HOME/endorsed.
62 rem
63 rem JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start"
64 rem command is executed. The default is "dt_socket".
65 rem
66 rem JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start"
67 rem command is executed. The default is 8000.
68 rem
69 rem JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start"
70 rem command is executed. Specifies whether JVM should suspend
71 rem execution immediately after startup. Default is "n".
72 rem
73 rem JPDA_OPTS (Optional) Java runtime options used when the "jpda start"
74 rem command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
75 rem and JPDA_SUSPEND are ignored. Thus, all required jpda
76 rem options MUST be specified. The default is:
77 rem
78 rem -agentlib:jdwp=transport=%JPDA_TRANSPORT%,
79 rem address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
80 rem
81 rem LOGGING_CONFIG (Optional) Override Tomcat's logging config file
82 rem Example (all one line)
83 rem set LOGGING_CONFIG="-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties"
84 rem
85 rem LOGGING_MANAGER (Optional) Override Tomcat's logging manager
86 rem Example (all one line)
87 rem set LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
88 rem
89 rem TITLE (Optional) Specify the title of Tomcat window. The default
90 rem TITLE is Tomcat if it's not specified.
91 rem Example (all one line)
92 rem set TITLE=Tomcat.Cluster#1.Server#1 [%DATE% %TIME%]
93 rem
94 rem
95 rem
96 rem $Id: catalina.bat 1344732 2012-05-31 14:08:02Z kkolinko $
97 rem ---------------------------------------------------------------------------
98
99 rem Suppress Terminate batch job on CTRL+C
100 if not ""%1"" == ""run"" goto mainEntry
101 if "%TEMP%" == "" goto mainEntry
102 if exist "%TEMP%\%~nx0.run" goto mainEntry
103 echo Y>"%TEMP%\%~nx0.run"
104 if not exist "%TEMP%\%~nx0.run" goto mainEntry
105 echo Y>"%TEMP%\%~nx0.Y"
106 call "%~f0" %* <"%TEMP%\%~nx0.Y"
107 rem Use provided errorlevel
108 set RETVAL=%ERRORLEVEL%
109 del /Q "%TEMP%\%~nx0.Y" >NUL 2>&1
110 exit /B %RETVAL%
111 :mainEntry
112 del /Q "%TEMP%\%~nx0.run" >NUL 2>&1
113
114 rem Guess CATALINA_HOME if not defined
115 set "CURRENT_DIR=%cd%"
116 if not "%CATALINA_HOME%" == "" goto gotHome
117 set "CATALINA_HOME=%CURRENT_DIR%"
118 if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
119 cd ..
120 set "CATALINA_HOME=%cd%"
121 cd "%CURRENT_DIR%"
122 :gotHome
123
124 if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
125 echo The CATALINA_HOME environment variable is not defined correctly
126 echo This environment variable is needed to run this program
127 goto end
128 :okHome
129
130 rem Copy CATALINA_BASE from CATALINA_HOME if not defined
131 if not "%CATALINA_BASE%" == "" goto gotBase
132 set "CATALINA_BASE=%CATALINA_HOME%"
133 :gotBase
134
135 rem Ensure that any user defined CLASSPATH variables are not used on startup,
136 rem but allow them to be specified in setenv.bat, in rare case when it is needed.
137 set CLASSPATH=
138
139 rem Get standard environment variables
140 if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome
141 call "%CATALINA_BASE%\bin\setenv.bat"
142 goto setenvDone
143 :checkSetenvHome
144 if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
145 :setenvDone
146
147 rem Get standard Java environment variables
148 if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath
149 echo Cannot find "%CATALINA_HOME%\bin\setclasspath.bat"
150 echo This file is needed to run this program
151 goto end
152 :okSetclasspath
153 call "%CATALINA_HOME%\bin\setclasspath.bat" %1
154 if errorlevel 1 goto end
155
156 rem Add on extra jar file to CLASSPATH
157 rem Note that there are no quotes as we do not want to introduce random
158 rem quotes into the CLASSPATH
159 if "%CLASSPATH%" == "" goto emptyClasspath
160 set "CLASSPATH=%CLASSPATH%;"
161 :emptyClasspath
162 set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar"
163
164 if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
165 set "CATALINA_TMPDIR=%CATALINA_BASE%\temp"
166 :gotTmpdir
167
168 rem Add tomcat-juli.jar to classpath
169 rem tomcat-juli.jar can be over-ridden per instance
170 if not exist "%CATALINA_BASE%\bin\tomcat-juli.jar" goto juliClasspathHome
171 set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar"
172 goto juliClasspathDone
173 :juliClasspathHome
174 set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\tomcat-juli.jar"
175 :juliClasspathDone
176
177 if not "%LOGGING_CONFIG%" == "" goto noJuliConfig
178 set LOGGING_CONFIG=-Dnop
179 if not exist "%CATALINA_BASE%\conf\logging.properties" goto noJuliConfig
180 set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
181 :noJuliConfig
182 set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%
183
184 if not "%LOGGING_MANAGER%" == "" goto noJuliManager
185 set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
186 :noJuliManager
187 set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%
188
189 rem ----- Execute The Requested Command ---------------------------------------
190
191 echo Using CATALINA_BASE: "%CATALINA_BASE%"
192 echo Using CATALINA_HOME: "%CATALINA_HOME%"
193 echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"
194 if ""%1"" == ""debug"" goto use_jdk
195 echo Using JRE_HOME: "%JRE_HOME%"
196 goto java_dir_displayed
197 :use_jdk
198 echo Using JAVA_HOME: "%JAVA_HOME%"
199 :java_dir_displayed
200 echo Using CLASSPATH: "%CLASSPATH%"
201
202 set _EXECJAVA=%_RUNJAVA%
203 set MAINCLASS=org.apache.catalina.startup.Bootstrap
204 set ACTION=start
205 set SECURITY_POLICY_FILE=
206 set DEBUG_OPTS=
207 set JPDA=
208
209 if not ""%1"" == ""jpda"" goto noJpda
210 set JPDA=jpda
211 if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
212 set JPDA_TRANSPORT=dt_socket
213 :gotJpdaTransport
214 if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
215 set JPDA_ADDRESS=8000
216 :gotJpdaAddress
217 if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend
218 set JPDA_SUSPEND=n
219 :gotJpdaSuspend
220 if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
221 set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
222 :gotJpdaOpts
223 shift
224 :noJpda
225
226 if ""%1"" == ""debug"" goto doDebug
227 if ""%1"" == ""run"" goto doRun
228 if ""%1"" == ""start"" goto doStart
229 if ""%1"" == ""stop"" goto doStop
230 if ""%1"" == ""configtest"" goto doConfigTest
231 if ""%1"" == ""version"" goto doVersion
232
233 echo Usage: catalina ( commands ... )
234 echo commands:
235 echo debug Start Catalina in a debugger
236 echo debug -security Debug Catalina with a security manager
237 echo jpda start Start Catalina under JPDA debugger
238 echo run Start Catalina in the current window
239 echo run -security Start in the current window with security manager
240 echo start Start Catalina in a separate window
241 echo start -security Start in a separate window with security manager
242 echo stop Stop Catalina
243 echo configtest Run a basic syntax check on server.xml
244 echo version What version of tomcat are you running?
245 goto end
246
247 :doDebug
248 shift
249 set _EXECJAVA=%_RUNJDB%
250 set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\java"
251 if not ""%1"" == ""-security"" goto execCmd
252 shift
253 echo Using Security Manager
254 set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
255 goto execCmd
256
257 :doRun
258 shift
259 if not ""%1"" == ""-security"" goto execCmd
260 shift
261 echo Using Security Manager
262 set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
263 goto execCmd
264
265 :doStart
266 shift
267 if not "%OS%" == "Windows_NT" goto noTitle
268 if "%TITLE%" == "" set TITLE=Tomcat
269 set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
270 goto gotTitle
271 :noTitle
272 set _EXECJAVA=start %_RUNJAVA%
273 :gotTitle
274 if not ""%1"" == ""-security"" goto execCmd
275 shift
276 echo Using Security Manager
277 set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
278 goto execCmd
279
280 :doStop
281 shift
282 set ACTION=stop
283 set CATALINA_OPTS=
284 goto execCmd
285
286 :doConfigTest
287 shift
288 set ACTION=configtest
289 set CATALINA_OPTS=
290 goto execCmd
291
292 :doVersion
293 %_EXECJAVA% -classpath "%CATALINA_HOME%\lib\catalina.jar" org.apache.catalina.util.ServerInfo
294 goto end
295
296
297 :execCmd
298 rem Get remaining unshifted command line arguments and save them in the
299 set CMD_LINE_ARGS=
300 :setArgs
301 if ""%1""=="""" goto doneSetArgs
302 set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
303 shift
304 goto setArgs
305 :doneSetArgs
306
307 rem Execute Java with the applicable properties
308 if not "%JPDA%" == "" goto doJpda
309 if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
310 %_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%
311 goto end
312 :doSecurity
313 %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
314 goto end
315 :doJpda
316 if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
317 %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_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%
318 goto end
319 :doSecurityJpda
320 %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
321 goto end
322
323 :end
Строки с 1 по 99 не читают много комментариев.Строки со 100 по 110 вообще не используются, например, куча запускает проверку файлов, переходите к строке 111, а затем удаляете промежуточные файлы, которые могут быть сгенерированы выше, затем согласно нормальный процесс, он был установлен в файле startup.bat вышеCATALINA_HOME
переменную и убедитесь, что файл bin\catalina.bat уже существует под измененной переменной (я думаю, автор написал этот абзац, чтобы пользователи не могли напрямую запускать файл catalina.bat). После этих суждений перейдите к строке 128 и настройте строки со 130 по 133.CATALINA_BASE
Переменные, комментарии в средних строках пропускаются, и если есть файл setenv.bat в строках с 139 по 144, выполнить этот файл. Строки со 147 по 153 выполняют файл setclasspath.bat (этот файл был предоставлен в том же каталоге уровня, конкретный сценарий был размещен ниже, вы можете прочитать его, и здесь не будет проводиться никакого анализа. Основная функция — проверить, является ли установленоJAVA_HOME
Если переменная отсутствует, на консоли отобразится подсказка. Обратите внимание, что строка 79 в этом файле установит_RUNJAVA
Переменная, т. е. значение переменнойJAVA_HOME
илиJRE_HOME
java.exe в каталоге bin). Проверьте и установите кучу переменных со строк 156 по 224 (обратите внимание на строки 202, 203 и 204, которые будут использоваться при запуске анализа в конце). Строки с 226 по 231 будут переходить в соответствии с параметрами, установленными при вызове catalina.bat, и в соответствии с последними инструкциями в предыдущем абзаце будут переходить на строку, помеченную doStart. Начиная со строки 265, после того как контрольная сумма установит некоторые переменные (обратите внимание на строку 269), она перейдет к строке, отмеченной execCmd, то есть к строке 297. Строки с 297 по 305 сохраняют системные параметры вCMD_LINE_ARGS
в переменной.
Следующий шаг — когда тайна будет разгадана, в нормальных условиях она будет выполнена до 310 строк, вот отдельный пост для разбора:%_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%
Следуйте подсказке в строке 202._EXECJAVA
Начальное значение равно_RUNJAVA
, но в строке 269 значение меняется наstart "%TITLE%" %_RUNJAVA%
Роль здесь - начать другое окно командной строки, дайте окно имя и, наконец, выполнить файл java.exe. от%JAVA_OPTS%
начать%MAINCLASS%
Раньше это была установка параметров времени выполнения и системных свойств.%MAINCLASS%
То есть org.apache.catalina.startup.Bootstrap в строке 203, за которой следуют другие параметры командной строки, последний параметр%ACTION%
Установите для запуска в строке 204. Его можно подытожить одним предложением, то есть выполняется основной метод класса Bootstrap.
setclasspath.bat:
1 @echo off
2 rem Licensed to the Apache Software Foundation (ASF) under one or more
3 rem contributor license agreements. See the NOTICE file distributed with
4 rem this work for additional information regarding copyright ownership.
5 rem The ASF licenses this file to You under the Apache License, Version 2.0
6 rem (the "License"); you may not use this file except in compliance with
7 rem the License. You may obtain a copy of the License at
8 rem
9 rem http://www.apache.org/licenses/LICENSE-2.0
10 rem
11 rem Unless required by applicable law or agreed to in writing, software
12 rem distributed under the License is distributed on an "AS IS" BASIS,
13 rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 rem See the License for the specific language governing permissions and
15 rem limitations under the License.
16
17 rem ---------------------------------------------------------------------------
18 rem Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings
19 rem are valid and consistent with the selected start-up options and set up the
20 rem endorsed directory.
21 rem
22 rem $Id: setclasspath.bat 1202062 2011-11-15 06:50:02Z mturk $
23 rem ---------------------------------------------------------------------------
24
25 rem Make sure prerequisite environment variables are set
26
27 rem In debug mode we need a real JDK (JAVA_HOME)
28 if ""%1"" == ""debug"" goto needJavaHome
29
30 rem Otherwise either JRE or JDK are fine
31 if not "%JRE_HOME%" == "" goto gotJreHome
32 if not "%JAVA_HOME%" == "" goto gotJavaHome
33 echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
34 echo At least one of these environment variable is needed to run this program
35 goto exit
36
37 :needJavaHome
38 rem Check if we have a usable JDK
39 if "%JAVA_HOME%" == "" goto noJavaHome
40 if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
41 if not exist "%JAVA_HOME%\bin\javaw.exe" goto noJavaHome
42 if not exist "%JAVA_HOME%\bin\jdb.exe" goto noJavaHome
43 if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome
44 set "JRE_HOME=%JAVA_HOME%"
45 goto okJava
46
47 :noJavaHome
48 echo The JAVA_HOME environment variable is not defined correctly.
49 echo It is needed to run this program in debug mode.
50 echo NB: JAVA_HOME should point to a JDK not a JRE.
51 goto exit
52
53 :gotJavaHome
54 rem No JRE given, use JAVA_HOME as JRE_HOME
55 set "JRE_HOME=%JAVA_HOME%"
56
57 :gotJreHome
58 rem Check if we have a usable JRE
59 if not exist "%JRE_HOME%\bin\java.exe" goto noJreHome
60 if not exist "%JRE_HOME%\bin\javaw.exe" goto noJreHome
61 goto okJava
62
63 :noJreHome
64 rem Needed at least a JRE
65 echo The JRE_HOME environment variable is not defined correctly
66 echo This environment variable is needed to run this program
67 goto exit
68
69 :okJava
70 rem Don't override the endorsed dir if the user has set it previously
71 if not "%JAVA_ENDORSED_DIRS%" == "" goto gotEndorseddir
72 rem Set the default -Djava.endorsed.dirs argument
73 set "JAVA_ENDORSED_DIRS=%CATALINA_HOME%\endorsed"
74 :gotEndorseddir
75
76 rem Set standard command for invoking Java.
77 rem Note that NT requires a window name argument when using start.
78 rem Also note the quoting as JAVA_HOME may contain spaces.
79 set _RUNJAVA="%JRE_HOME%\bin\java"
80 set _RUNJDB="%JAVA_HOME%\bin\jdb"
81
82 goto end
83
84 :exit
85 exit /b 1
86
87 :end
88 exit /b 0
3. Резюме
Выше приведен общий процесс в сценарии запуска tomcat, Он говорит только о режиме запуска сценария по умолчанию, но в чтении сценария вы можете видеть, что вы можете запускать tomcat по-разному в соответствии с различными параметрами в catalina.bat:
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina
configtest Run a basic syntax check on server.xml
Пока вы можете понять основные команды DOS, чтение этих сценариев на самом деле очень просто.Вы можете просмотреть другие файлы bat.Вы обнаружите, что через долгое время файл catalina.bat в конечном итоге будет выполнен, а Файл catalina.bat в конечном итоге выполнит Bootstrap Основной метод файла, разница в том, что при вызове основного метода будут добавлены разные входные параметры. Файл bat используется для запуска Tomcat в операционной системе Windows, а файл sh используется для запуска среды Unix Принцип тот же.