Анализ запуска Tomcat 7 (1) сценарий запуска

Java Tomcat

в предыдущей статье«Создание среды выполнения исходного кода»Он запускается прямым запуском основной функции 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_HOMEjava.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 Принцип тот же.