日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tomcat7源码分析学习系列之二-----tomcat的真正的启动脚本catalina.bat解析

發(fā)布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tomcat7源码分析学习系列之二-----tomcat的真正的启动脚本catalina.bat解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

@echo off

setlocal

rem Suppress Terminate batch job on CTRL+C?
if not ""%1"" == ""run"" goto mainEntry                         ?rem 命令后第一個參數(shù)
if "%TEMP%" == "" goto mainEntry                           rem TEMP,系統(tǒng)環(huán)境變量,Windows操作系統(tǒng)安裝后,系統(tǒng)會自動配置TMEP環(huán)境變量
if exist "%TEMP%\%~nx0.run" goto mainEntry                   ? rem %0表當(dāng)前可執(zhí)行文件的名稱,比如catalina.bat 的名稱catalina。%~nx0表示可執(zhí)行文件+擴展名
echo Y>"%TEMP%\%~nx0.run"                            rem 把字母Y寫入到%TEMP%\%~nx0.run文件,
if not exist "%TEMP%\%~nx0.run" goto mainEntry
echo Y>"%TEMP%\%~nx0.Y"                            rem 寫入Y到 %TEMP%\catalina.bat.Y . 如果文件不存在, 則新建一個
call "%~f0" %* <"%TEMP%\%~nx0.Y"              ? ? rem %~f0 當(dāng)前可執(zhí)行文件的絕對路徑,%* 表示命令傳遞的所有參數(shù),這一行的含義是讀取%TEMP%\catalina.bat.Y的內(nèi)容作為參數(shù)放到catalina.bat 命令最后
rem Use provided errorlevel
set RETVAL=%ERRORLEVEL%                ?? ? ? ? rem %ERRORLEVEL%,獲取上一個命令執(zhí)行后的退出碼
del /Q "%TEMP%\%~nx0.Y" >NUL 2>&1               rem del /Q表示靜默刪除,不會給你任何提示。該行是刪除 %TEMP%\catalina.bat.Y 這個文件,>nNUL 表示重定向輸出到NUL中,什么到看不到。

                                  ?rem?2表示錯誤輸出,&1標準輸出
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? rem 整行的含義是刪除%TEMP%\catalina.bat.Y ,把錯誤輸出的到標準輸出,在輸出到NUL
exit /B %RETVAL% ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? rem 程序退出,/B 輸出退出碼。即RETVAL
:mainEntry
del /Q "%TEMP%\%~nx0.run" >NUL 2>&1

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

rem Copy CATALINA_BASE from CATALINA_HOME if not defined
if not "%CATALINA_BASE%" == "" goto gotBase
set "CATALINA_BASE=%CATALINA_HOME%"
rem 上面從:mainEntry到此處,主要是設(shè)置本地環(huán)境變量CATALINA_HOME,和CATALINA_BASE
:gotBase

rem Ensure that any user defined CLASSPATH variables are not used on startup,
rem but allow them to be specified in setenv.bat, in rare case when it is needed.
set CLASSPATH=                               rem 設(shè)置臨時環(huán)境變量CLASSPATH

rem Get standard environment variables
if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome
call "%CATALINA_BASE%\bin\setenv.bat"
goto setenvDone
:checkSetenvHome
if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
:setenvDone
rem 以上6行判斷tomcat中bin目錄是否存在setenv.bat批處理文件,存在則執(zhí)行該文件。通常是不存在的


rem Get standard Java environment variables
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
call "%CATALINA_HOME%\bin\setclasspath.bat" %1
if errorlevel 1 goto end
rem 以上幾行是判斷tomcat中bin目錄是否存在setclasspath.bat批處理文件,存在則執(zhí)行批處理文件,不存在則提示,并退出啟動tomcat。
rem setclasspath.bat主要是設(shè)置jdk相關(guān)的環(huán)境變量,因為tomcat的需要在java虛擬機上運行。
rem JAVA_HOME,jdk的目錄,JRE_HOME,jre目錄,JAVA_ENDORSED_DIRS = %CATALINA_HOME%\endorsed,_RUNJAVA = %JRE_HOME%\bin\java.exe,_RUNJDB = %JAVA_HOME%\bin\jdb.exe
rem Note that there are no quotes as we do not want to introduce random
rem quotes into the CLASSPATH
if "%CLASSPATH%" == "" goto emptyClasspath
set "CLASSPATH=%CLASSPATH%;"
:emptyClasspath
set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar"
rem 以上幾行是把tomcat中bin目錄下的bootstrap.jar加入到臨時環(huán)境變量CLASSPATH

if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
set "CATALINA_TMPDIR=%CATALINA_BASE%\temp"
:gotTmpdir
rem 以上3行是設(shè)置環(huán)境變量CATALINA_TMPDIR=%CATALINA_BASE%\temp,即在tomcat根目錄下的temp


rem Add tomcat-juli.jar to classpath
rem tomcat-juli.jar can be over-ridden per instance
if not exist "%CATALINA_BASE%\bin\tomcat-juli.jar" goto juliClasspathHome
set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar"
goto juliClasspathDone
:juliClasspathHome
set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\tomcat-juli.jar"
:juliClasspathDone
rem 以上幾行是把tomcat中bin目錄下的bootstrap.jar加入到臨時環(huán)境變量CLASSPATH


if not "%JSSE_OPTS%" == "" goto gotJsseOpts
set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
:gotJsseOpts
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"

if not "%LOGGING_CONFIG%" == "" goto noJuliConfig
set LOGGING_CONFIG=-Dnop
if not exist "%CATALINA_BASE%\conf\logging.properties" goto noJuliConfig
set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties" ? ? ?rem 日志配置文件文娛tomcat中的\conf目錄下
:noJuliConfig

if not "%LOGGING_MANAGER%" == "" goto noJuliManager
set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager ? ? ? ? ? ? ? ?rem 日志管理加載類
:noJuliManager
rem 設(shè)置環(huán)境變量JAVA_OPTS LOGGING_CONFIG LOGGING_MANAGER,這些變量會作為參數(shù)追加到執(zhí)行命令 java的后面,最后部分可以看到
rem ----- Execute The Requested Command ---------------------------------------

echo Using CATALINA_BASE: "%CATALINA_BASE%"
echo Using CATALINA_HOME: "%CATALINA_HOME%"
echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"
if ""%1"" == ""debug"" goto use_jdk
echo Using JRE_HOME: "%JRE_HOME%"
goto java_dir_displayed
:use_jdk
echo Using JAVA_HOME: "%JAVA_HOME%"
:java_dir_displayed
echo Using CLASSPATH: "%CLASSPATH%"
rem 以上是打印相關(guān)環(huán)境變量
set _EXECJAVA=%_RUNJAVA%                    rem 上面定義了_RUNJAVA = %JRE_HOME%\bin\java.exe
set MAINCLASS=org.apache.catalina.startup.Bootstrap        rem tomcat啟動類
set ACTION=start rem 執(zhí)行動作默認為start
set SECURITY_POLICY_FILE=
set DEBUG_OPTS=
set JPDA=
rem 設(shè)置相關(guān)環(huán)境變量,為啟動tomcat最準備,以上環(huán)境變量會作為執(zhí)行程序java的參數(shù)來啟動tomcat
if not ""%1"" == ""jpda"" goto noJpda
set JPDA=jpda
if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
set JPDA_TRANSPORT=dt_socket
:gotJpdaTransport
if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
set JPDA_ADDRESS=8000
:gotJpdaAddress
if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend
set JPDA_SUSPEND=n
:gotJpdaSuspend
if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
:gotJpdaOpts
shift
:noJpda
rem 以上是對jpda(java platform debug achitecture)相關(guān)參數(shù)進行設(shè)置。在執(zhí)行命令catalina.bat jpda時才會進行上面的操作
if ""%1"" == ""debug"" goto doDebug
if ""%1"" == ""run"" goto doRun
if ""%1"" == ""start"" goto doStart
if ""%1"" == ""stop"" goto doStop
if ""%1"" == ""configtest"" goto doConfigTest
if ""%1"" == ""version"" goto doVersion
rem 以上是針對不同的啟動策略,執(zhí)行不同的腳本
echo Usage: catalina ( commands ... )
echo commands:
echo debug Start Catalina in a debugger
echo debug -security Debug Catalina with a security manager
echo jpda start Start Catalina under JPDA debugger
echo run Start Catalina in the current window
echo run -security Start in the current window with security manager
echo start Start Catalina in a separate window
echo start -security Start in a separate window with security manager
echo stop Stop Catalina
echo configtest Run a basic syntax check on server.xml
echo version What version of tomcat are you running?
goto end

:doDebug
shift
set _EXECJAVA=%_RUNJDB%
set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\java"
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
goto execCmd

:doRun
shift
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
goto execCmd

:doStart
shift
if "%TITLE%" == "" set TITLE=Tomcat
set _EXECJAVA=start "%TITLE%" %_RUNJAVA% ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rem 如果是 startup.bat 腳本啟動或者是直接用catalina.bat start命令啟動的話, 會啟動一個新的 cmd 窗口, 并且把 cmd 的 title 設(shè)置為 Tomcat.
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
goto execCmd

:doStop
shift
set ACTION=stop
set CATALINA_OPTS=
goto execCmd

:doConfigTest
shift
set ACTION=configtest
set CATALINA_OPTS=
goto execCmd

:doVersion
%_EXECJAVA% -classpath "%CATALINA_HOME%\lib\catalina.jar" org.apache.catalina.util.ServerInfo
goto end


:execCmd
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
rem 以上是把執(zhí)行批處理文件命令后的參數(shù)循環(huán)加載到CMD_LINE_ARGS中


rem Execute Java with the applicable properties
if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
%_EXECJAVA% %LOGGING_CONFIG% %LOGGING_MANAGER% %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%
goto end
:doSecurity
%_EXECJAVA% %LOGGING_CONFIG% %LOGGING_MANAGER% %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%
goto end
:doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
%_EXECJAVA% %LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %JPDA_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%
goto end
:doSecurityJpda
%_EXECJAVA% %LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %JPDA_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%
goto end

:end

轉(zhuǎn)載于:https://www.cnblogs.com/lbkxx/p/tomcat_catalina.html

總結(jié)

以上是生活随笔為你收集整理的Tomcat7源码分析学习系列之二-----tomcat的真正的启动脚本catalina.bat解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。