tomcat启动命令
安装tomcat之后,设置CATALINA_HOME=tomcat的安装目录,比如安装在c:/tomcat,那么CATALINA_HOME=c:/tomcat,添加路径到path环境变量,%CATALINA_HOME%/bin,然后打开控制台,进入tomcat的bin目录,这儿有tomcat的启动脚本,startup.bat启动tomcat,shutdown.bat关闭tomcat。我是在windows下做的调试,如果在Linux/unix下,相应的启动脚本为startup.sh和shutdown.sh。
tomcat启动脚本解说
用文本编辑器打开startup.bat,你会看到如下,内容:
- @echo off
-
- if "%OS%" == "Windows_NT" setlocal
-
- rem ---------------------------------------------------------------------------
-
- rem Start script for the CATALINA Server
-
- rem
-
- rem $Id: startup.bat,v 1.6 2004/05/27 18:25:11 yoavs Exp $
-
- rem ---------------------------------------------------------------------------
-
-
-
- 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
-
-
-
- set EXECUTABLE=%CATALINA_HOME%/bin/catalina.bat
-
-
-
- rem Check that target executable exists
-
- if exist "%EXECUTABLE%" goto okExec
-
- echo Cannot find %EXECUTABLE%
-
- echo This file is needed to run this program
-
- goto end
-
- :okExec
-
-
-
- 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
-
-
-
- call "%EXECUTABLE%" start %CMD_LINE_ARGS%
-
-
-
- :end
第一段,内容如下,先设置好变量CATALINA_HOME,然后判断是否存在脚本文件"%CATALINA_HOME%/bin/catalina.bat",如果找不到该文件,那么退出脚本的执行,提示设置CATALINA_HOME环境变量,这就是我们在安装tomcat后,要设置环境变量CATALINA_HOME的原因。
- @echo off
-
- if "%OS%" == "Windows_NT" setlocal
-
- rem ---------------------------------------------------------------------------
-
- rem Start script for the CATALINA Server
-
- rem
-
- rem $Id: startup.bat,v 1.6 2004/05/27 18:25:11 yoavs Exp $
-
- rem ---------------------------------------------------------------------------
-
-
-
- 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
-
-
-
- set EXECUTABLE=%CATALINA_HOME%/bin/catalina.bat
第二段,内容如下,用EXECUTABLE脚本指向的脚本文件,执行启动命令,传入参数start,既进入启动脚本catalina.bat的执行。
- rem Check that target executable exists
-
- if exist "%EXECUTABLE%" goto okExec
-
- echo Cannot find %EXECUTABLE%
-
- echo This file is needed to run this program
-
- goto end
-
- :okExec
-
-
-
- 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
-
-
-
- call "%EXECUTABLE%" start %CMD_LINE_ARGS%
-
-
-
- :end
catalina.bat内容如下:
- @echo off
-
- if "%OS%" == "Windows_NT" setlocal
-
- rem ---------------------------------------------------------------------------
-
- rem Start/Stop Script for the CATALINA Server
-
- rem
-
- rem Environment Variable Prequisites
-
- rem
-
- rem CATALINA_HOME May point at your Catalina "build" directory.
-
- rem
-
- rem CATALINA_BASE (Optional) Base directory for resolving dynamic portions
-
- rem of a Catalina installation. If not present, resolves to
-
- rem the same directory that CATALINA_HOME points to.
-
- rem
-
- rem CATALINA_OPTS (Optional) Java runtime options used when the "start",
-
- rem "stop", or "run" command is executed.
-
- rem
-
- rem CATALINA_TMPDIR (Optional) Directory path location of temporary directory
-
- rem the JVM should use (java.io.tmpdir). Defaults to
-
- rem %CATALINA_BASE%/temp.
-
- rem
-
- rem JAVA_HOME Must point at your Java Development Kit installation.
-
- rem
-
- rem JAVA_OPTS (Optional) Java runtime options used when the "start",
-
- rem "stop", or "run" command is executed.
-
- rem
-
- rem JSSE_HOME (Optional) May point at your Java Secure Sockets Extension
-
- rem (JSSE) installation, whose JAR files will be added to the
-
- rem system class path used to start Tomcat.
-
- rem
-
- rem JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start"
-
- rem command is executed. The default is "dt_shmem".
-
- rem
-
- rem JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start"
-
- rem command is executed. The default is "jdbconn".
-
- rem
-
- rem $Id: catalina.bat,v 1.9.2.2 2004/09/23 20:17:14 yoavs Exp $
-
- rem ---------------------------------------------------------------------------
-
-
-
- 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 Get standard environment variables
-
- if exist "%CATALINA_HOME%/bin/setenv.bat" call "%CATALINA_HOME%/bin/setenv.bat"
-
-
-
- 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
-
- set BASEDIR=%CATALINA_HOME%
-
- call "%CATALINA_HOME%/bin/setclasspath.bat"
-
-
-
- rem Add on extra jar files to CLASSPATH
-
- if "%JSSE_HOME%" == "" goto noJsse
-
- set CLASSPATH=%CLASSPATH%;%JSSE_HOME%/lib/jcert.jar;%JSSE_HOME%/lib/jnet.jar;%JSSE_HOME%/lib/jsse.jar
-
- :noJsse
-
- set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%/bin/bootstrap.jar
-
-
-
- if not "%CATALINA_BASE%" == "" goto gotBase
-
- set CATALINA_BASE=%CATALINA_HOME%
-
- :gotBase
-
-
-
- if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
-
- set CATALINA_TMPDIR=%CATALINA_BASE%/temp
-
- :gotTmpdir
-
-
-
- rem ----- Execute The Requested Command ---------------------------------------
-
-
-
- echo Using CATALINA_BASE: %CATALINA_BASE%
-
- echo Using CATALINA_HOME: %CATALINA_HOME%
-
- echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
-
- echo Using JAVA_HOME: %JAVA_HOME%
-
-
-
- set _EXECJAVA=%_RUNJAVA%
-
- set MAINCLASS=org.apache.catalina.startup.Bootstrap
-
- set ACTION=start
-
- set SECURITY_POLICY_FILE=
-
- set DEBUG_OPTS=
-
- set JPDA=
-
-
-
- if not ""%1"" == ""jpda"" goto noJpda
-
- set JPDA=jpda
-
- if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
-
- set JPDA_TRANSPORT=dt_shmem
-
- :gotJpdaTransport
-
- if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
-
- set JPDA_ADDRESS=jdbconn
-
- :gotJpdaAddress
-
- shift
-
- :noJpda
-
-
-
- if ""%1"" == ""debug"" goto doDebug
-
- if ""%1"" == ""run"" goto doRun
-
- if ""%1"" == ""start"" goto doStart
-
- if ""%1"" == ""stop"" goto doStop
-
- if ""%1"" == ""version"" goto doVersion
-
-
-
- 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 version What version of tomcat are you running?
-
- goto end
-
-
-
- :doDebug
-
- shift
-
- set _EXECJAVA=%_RUNJDB%
-
- set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%/../../jakarta-tomcat-catalina/catalina/src/share"
-
- 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 not "%OS%" == "Windows_NT" goto noTitle
-
- set _EXECJAVA=start "Tomcat" %_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
-
-
-
- :doStop
-
- shift
-
- set ACTION=stop
-
- goto execCmd
-
-
-
- :doVersion
-
- %_EXECJAVA% -classpath "%CATALINA_HOME%/server/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 Execute Java with the applicable properties
-
- if not "%JPDA%" == "" goto doJpda
-
- if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
-
- %_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%
-
- goto end
-
- :doSecurity
-
- %_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%
-
- goto end
-
- :doJpda
-
- if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
-
- %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %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% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %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
解释,1。再次验证catalina.bat;2。调用setclasspath.bat设置java虚拟机相关的环境变量,所以在运行tomcat的前,一定要先安装jdk,并设置好JAVA_HOME环境变量;3。设置启动程序,添加CLASSPATH,bootstrap.jar,和启动类org.apache.catalina.startup.Bootstrap;4。最后执行虚拟机,运行tomcat。
运行tomcat的参数行为%_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%,在我的电脑上调试,将所有的变量内容转译出来,执行的命令即为:start "Tomcat" "C:/j2sdk1.4.2_15/bin/Java" -Djava.endorsed.dirs="C:/Tomcat 5.0/common/endorsed" -classpath "C:/j2sdk1.4.2_15/lib/tools.jar;C:/Tomcat 5.0/bin/bootstrap.jar" -Dcatalina.base="C:/Tomcat 5.0" -Dcatalina.home="C:/Tomcat 5.0" -Djava.io.tmpdir="C:/Tomcat 5.0/temp" org.apache.catalina.startup.Bootstrap start
在该命令中,start "Tomcat"是在控制态打开一个新的窗口,然后运行java虚拟机C:/j2sdk1.4.2_15/bin/java,现在大家应该明白了,tomcat是从bootstrap.jar中的org.apache.catalina.startup.Bootstrap类的main函数开始启动运行,并且传入了start参数。-D开始的都是虚拟机的运行参数。
用winrar打开bootstrap.jar打开,在META-INF目录下打开MANIFEST.MF,你会看到如下内容: Manifest-Version: 1.0 Ant-Version: Apache Ant 1.6.1 Created-By: 1.4.2-b28 (Sun Microsystems Inc.) Main-Class: org.apache.catalina.startup.Bootstrap Specification-Title: Catalina Specification-Version: 1.0 Class-Path: jmx.jar commons-daemon.jar commons-logging-api.jar 指定了该jar包从那个类开始运行,依赖那些jar包。
结论
通过对脚本的研究,我们应该知道,tomcat从那儿开始运行,只有有了运行的线索,那么我们就可以从头开始调试tomcat源代码。调试tomcat源代码的准备工作,从www.apache.org上下载相应版本,带源代码的安装程序,并安装。