zoukankan      html  css  js  c++  java
  • Tomcat启动脚本(2)catalina.bat

    @echo off
    rem Licensed to the Apache Software Foundation (ASF) under one or more
    rem contributor license agreements.  See the NOTICE file distributed with
    rem this work for additional information regarding copyright ownership.
    rem The ASF licenses this file to You under the Apache License, Version 2.0
    rem (the "License"); you may not use this file except in compliance with
    rem the License.  You may obtain a copy of the License at
    rem
    rem     http://www.apache.org/licenses/LICENSE-2.0
    rem
    rem Unless required by applicable law or agreed to in writing, software
    rem distributed under the License is distributed on an "AS IS" BASIS,
    rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    rem See the License for the specific language governing permissions and
    rem limitations under the License.
    
    rem ---------------------------------------------------------------------------
    rem Start/Stop Script for the CATALINA Server
    rem
    rem Environment Variable Prerequisites
    rem
    rem   Do not set the variables in this script. Instead put them into a script
    rem   setenv.bat in CATALINA_BASE/bin to keep your customizations separate.
    rem
    rem   WHEN RUNNING TOMCAT AS A WINDOWS SERVICE:
    rem   Note that the environment variables that affect the behavior of this
    rem   script will have no effect at all on Windows Services. As such, any
    rem   local customizations made in a CATALINA_BASE/bin/setenv.bat script
    rem   will also have no effect on Tomcat when launched as a Windows Service.
    rem   The configuration that controls Windows Services is stored in the Windows
    rem   Registry, and is most conveniently maintained using the "tomcatXw.exe"
    rem   maintenance utility, where "X" is the major version of Tomcat you are
    rem   running.
    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                   "run" or "debug" command is executed.
    rem                   Include here and not in JAVA_OPTS all options, that should
    rem                   only be used by Tomcat itself, not by the stop process,
    rem                   the version command etc.
    rem                   Examples are heap size, GC logging, JMX ports etc.
    rem
    rem   CATALINA_TMPDIR (Optional) Directory path location of temporary directory
    rem                   the JVM should use (java.io.tmpdir).  Defaults to
    rem                   %CATALINA_BASE%	emp.
    rem
    rem   JAVA_HOME       Must point at your Java Development Kit installation.
    rem                   Required to run the with the "debug" argument.
    rem
    rem   JRE_HOME        Must point at your Java Runtime installation.
    rem                   Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
    rem                   are both set, JRE_HOME is used.
    rem
    rem   JAVA_OPTS       (Optional) Java runtime options used when any command
    rem                   is executed.
    rem                   Include here and not in CATALINA_OPTS all options, that
    rem                   should be used by Tomcat and also by the stop process,
    rem                   the version command etc.
    rem                   Most options should go into CATALINA_OPTS.
    rem
    rem   JAVA_ENDORSED_DIRS (Optional) Lists of of semi-colon separated directories
    rem                   containing some jars in order to allow replacement of APIs
    rem                   created outside of the JCP (i.e. DOM and SAX from W3C).
    rem                   It can also be used to update the XML parser implementation.
    rem                   This is only supported for Java <= 8.
    rem                   Defaults to $CATALINA_HOME/endorsed.
    rem
    rem   JPDA_TRANSPORT  (Optional) JPDA transport used when the "jpda start"
    rem                   command is executed. The default is "dt_socket".
    rem
    rem   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"
    rem                   command is executed. The default is localhost:8000.
    rem
    rem   JPDA_SUSPEND    (Optional) Java runtime options used when the "jpda start"
    rem                   command is executed. Specifies whether JVM should suspend
    rem                   execution immediately after startup. Default is "n".
    rem
    rem   JPDA_OPTS       (Optional) Java runtime options used when the "jpda start"
    rem                   command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
    rem                   and JPDA_SUSPEND are ignored. Thus, all required jpda
    rem                   options MUST be specified. The default is:
    rem
    rem                   -agentlib:jdwp=transport=%JPDA_TRANSPORT%,
    rem                       address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
    rem
    rem   JSSE_OPTS       (Optional) Java runtime options used to control the TLS
    rem                   implementation when JSSE is used. Default is:
    rem                   "-Djdk.tls.ephemeralDHKeySize=2048"
    rem
    rem   LOGGING_CONFIG  (Optional) Override Tomcat's logging config file
    rem                   Example (all one line)
    rem                   set LOGGING_CONFIG="-Djava.util.logging.config.file=%CATALINA_BASE%conflogging.properties"
    rem
    rem   LOGGING_MANAGER (Optional) Override Tomcat's logging manager
    rem                   Example (all one line)
    rem                   set LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
    rem
    rem   TITLE           (Optional) Specify the title of Tomcat window. The default
    rem                   TITLE is Tomcat if it's not specified.
    rem                   Example (all one line)
    rem                   set TITLE=Tomcat.Cluster#1.Server#1 [%DATE% %TIME%]
    rem ---------------------------------------------------------------------------
    
    setlocal
    
    rem Suppress Terminate batch job on CTRL+C
    rem 此处%1是startup.bat.里面传入的,值为start,如果通过catalina.bat run就往下执行。
    if not ""%1"" == ""run"" goto mainEntry
    if "%TEMP%" == "" goto mainEntry
    if exist "%TEMP%\%~nx0.run" goto mainEntry
    echo Y>"%TEMP%\%~nx0.run"
    if not exist "%TEMP%\%~nx0.run" goto mainEntry
    echo Y>"%TEMP%\%~nx0.Y"
    call "%~f0" %* <"%TEMP%\%~nx0.Y"
    rem Use provided errorlevel
    set RETVAL=%ERRORLEVEL%
    del /Q "%TEMP%\%~nx0.Y" >NUL 2>&1
    exit /B %RETVAL%
    :mainEntry
    rem 删除文件C:UsersMacroAppDataLocalTempcatalina.bat.run
    del /Q "%TEMP%\%~nx0.run" >NUL 2>&1
    
    rem Guess CATALINA_HOME if not defined
    rem 下面的逻辑到143行与startup.bat一致
    set "CURRENT_DIR=%cd%"
    if not "%CATALINA_HOME%" == "" goto gotHome
    set "CATALINA_HOME=%CURRENT_DIR%"
    if exist "%CATALINA_HOME%incatalina.bat" goto okHome
    cd ..
    set "CATALINA_HOME=%cd%"
    cd "%CURRENT_DIR%"
    :gotHome
    
    if exist "%CATALINA_HOME%incatalina.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
    rem %CATALINA_BASE%环境变量,为空则设置为CATALINA_HOME(上面设置了)CATALINA_HOME是因为tomcat4以后servlet容器叫catalina,该环境变量是tomcat安装目录,catalina_base是同一个安装目录,配置多个启动实例时候指向的文件夹。
    if not "%CATALINA_BASE%" == "" goto gotBase
    set "CATALINA_BASE=%CATALINA_HOME%"
    :gotBase
    
    rem Ensure that neither CATALINA_HOME nor CATALINA_BASE contains a semi-colon
    rem as this is used as the separator in the classpath and Java provides no
    rem mechanism for escaping if the same character appears in the path. Check this
    rem by replacing all occurrences of ';' with '' and checking that neither
    rem CATALINA_HOME nor CATALINA_BASE have changed
    
    rem 环境变量里面的:;=表示把所有的;干掉(干掉分号前后相等,说明环境变量里面没有分号)
    rem 这里主要是判断 CATALINA_HOME 环境变量的值 和 CATALINA_BASE 环境变量的值是否以 分号为结尾, 如果以 分号为结尾的话, 就报错退出.
    if "%CATALINA_HOME%" == "%CATALINA_HOME:;=%" goto homeNoSemicolon 
    echo Using CATALINA_HOME:   "%CATALINA_HOME%"
    echo Unable to start as CATALINA_HOME contains a semicolon (;) character
    goto end
    :homeNoSemicolon
    rem 如果通过catalina_base没有分号,则跳到baseNoSemicolon
    if "%CATALINA_BASE%" == "%CATALINA_BASE:;=%" goto baseNoSemicolon
    echo Using CATALINA_BASE:   "%CATALINA_BASE%"
    echo Unable to start as CATALINA_BASE contains a semicolon (;) character
    goto end
    :baseNoSemicolon
    
    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 Get standard environment variables
    rem setenv.bat不存在,所以直接执行185行
    if not exist "%CATALINA_BASE%insetenv.bat" goto checkSetenvHome
    call "%CATALINA_BASE%insetenv.bat"
    goto setenvDone
    :checkSetenvHome
    if exist "%CATALINA_HOME%insetenv.bat" call "%CATALINA_HOME%insetenv.bat"
    :setenvDone
    
    rem Get standard Java environment variables
    rem 如果有setclasspath.bat跳到190行调用它,并且把传入的参数,如果是startup.bat启动的话,参数就是start
    if exist "%CATALINA_HOME%insetclasspath.bat" goto okSetclasspath
    echo Cannot find "%CATALINA_HOME%insetclasspath.bat"
    echo This file is needed to run this program
    goto end
    :okSetclasspath
    rem 调用setclasspath.bat设置JAVA_HOME,设置java.exe和jdb.exe的路径
    call "%CATALINA_HOME%insetclasspath.bat" %1
    if errorlevel 1 goto end
    
    rem Add on extra jar file to CLASSPATH
    rem Note that there are no quotes as we do not want to introduce random
    rem quotes into the CLASSPATH
    rem 现在一般不设置classpath,跳转到emptyClasspath将tomcatinootstrap.jar设置给classpath变量
    if "%CLASSPATH%" == "" goto emptyClasspath
    set "CLASSPATH=%CLASSPATH%;"
    :emptyClasspath
    set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%inootstrap.jar"
    rem 如果设置了CATALINA_TMPDIR跳转,但是不设置,往下将变量CATALINA_TMPDIR设置为tomcat	emp路径
    if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
    set "CATALINA_TMPDIR=%CATALINA_BASE%	emp"
    :gotTmpdir
    
    rem Add tomcat-juli.jar to classpath
    rem tomcat-juli.jar can be over-ridden per instance
    rem 如果tomcatin	omcat-juli.jar不存在跳转,但是存在,将classpath变量设置为tomcatinootstrap.jar和tomcatin	omcat-juli.jar
    if not exist "%CATALINA_BASE%in	omcat-juli.jar" goto juliClasspathHome
    set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%in	omcat-juli.jar"
    goto juliClasspathDone
    :juliClasspathHome
    set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%in	omcat-juli.jar"
    :juliClasspathDone
    rem JSSE_OPTS存在则跳转,不存在继续,主要是追加一系列的启动参数到 JAVA_OPTS 这个环境变量中.
    if not "%JSSE_OPTS%" == "" goto gotJsseOpts
    set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
    :gotJsseOpts
    set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
    
    rem Register custom URL handlers
    rem Do this here so custom URL handles (specifically 'war:...') can be used in the security policy
    set "JAVA_OPTS=%JAVA_OPTS% -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"
    rem LOGGING_CONFIG不为空,跳转,为空往下
    if not "%LOGGING_CONFIG%" == "" goto noJuliConfig
    set LOGGING_CONFIG=-Dnop
    rem tomcatconflogging.properties文件存在,继续往下
    if not exist "%CATALINA_BASE%conflogging.properties" goto noJuliConfig
    set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%conflogging.properties"
    :noJuliConfig
    rem LOGGING_MANAGER为空,继续往下
    if not "%LOGGING_MANAGER%" == "" goto noJuliManager
    set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    :noJuliManager
    rem 设置JDK_JAVA_OPTIONS变量
    rem Configure JAVA 9 specific start-up parameters
    set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.base/java.lang=ALL-UNNAMED"
    set "JDK_JAVA_OPTIONS=%JDK_JAVA_OPTIONS% --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED"
    
    rem Java 9 no longer supports the java.endorsed.dirs
    rem system property. Only try to use it if
    rem JAVA_ENDORSED_DIRS was explicitly set
    rem or CATALINA_HOME/endorsed exists.
    rem 没有JAVA_ENDORSED_DIRS
    set ENDORSED_PROP=ignore.endorsed.dirs
    if "%JAVA_ENDORSED_DIRS%" == "" goto noEndorsedVar
    set ENDORSED_PROP=java.endorsed.dirs
    goto doneEndorsed
    :noEndorsedVar
    rem 没有endorsed,跳转
    if not exist "%CATALINA_HOME%endorsed" goto doneEndorsed
    set ENDORSED_PROP=java.endorsed.dirs
    :doneEndorsed
    
    rem ----- Execute The Requested Command ---------------------------------------
    
    echo Using CATALINA_BASE:   "%CATALINA_BASE%"
    echo Using CATALINA_HOME:   "%CATALINA_HOME%"
    echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"
    rem debug就跳转到use_jdk
    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 _EXECJAVA设置为java_homeinjava.exe
    set _EXECJAVA=%_RUNJAVA%
    rem 主类
    set MAINCLASS=org.apache.catalina.startup.Bootstrap
    set ACTION=start
    set SECURITY_POLICY_FILE=
    set DEBUG_OPTS=
    set JPDA=
    rem 参数是start,不是jpda,跳转到noJpda
    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=localhost: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
    
    if ""%1"" == ""debug"" goto doDebug
    if ""%1"" == ""run"" goto doRun
    rem 执行这个逻辑
    if ""%1"" == ""start"" goto doStart
    if ""%1"" == ""stop"" goto doStop
    if ""%1"" == ""configtest"" goto doConfigTest
    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   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%confcatalina.policy"
    goto execCmd
    
    :doRun
    shift
    if not ""%1"" == ""-security"" goto execCmd
    shift
    echo Using Security Manager
    set "SECURITY_POLICY_FILE=%CATALINA_BASE%confcatalina.policy"
    goto execCmd
    
    :doStart
    rem 移动参数
    shift
    rem TITLE为空,设置为Tomcat,_EXECJAVA是start "Tomcat" "C:Program FilesJavajdk1.8.0_152injava.exe"
    if "%TITLE%" == "" set TITLE=Tomcat
    set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
    rem 移动参数后%1位空,跳转到execCmd,如果指定参数-security,去找tomcatconfcatalina.policy
    if not ""%1"" == ""-security"" goto execCmd
    shift
    echo Using Security Manager
    set "SECURITY_POLICY_FILE=%CATALINA_BASE%confcatalina.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%libcatalina.jar" org.apache.catalina.util.ServerInfo
    goto end
    
    rem 拼接参数
    :execCmd
    rem Get remaining unshifted command line arguments and save them in the
    set CMD_LINE_ARGS=
    :setArgs
    rem %1为空
    if ""%1""=="""" goto doneSetArgs
    set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
    shift
    goto setArgs
    :doneSetArgs
    rem "%CMD_LINE_ARGS%"为空
    
    rem Execute Java with the applicable properties
    rem %JPDA%为空
    if not "%JPDA%" == "" goto doJpda
    if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
    rem %JPDA%和%SECURITY_POLICY_FILE%都为空,执行这里
    rem 按给定的各种启动参数,启动类等等,执行start "Tomcat" "C:Program FilesJavajdk1.8.0_152injava.exe"命令
    %_EXECJAVA% %LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%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% -D%ENDORSED_PROP%="%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% -D%ENDORSED_PROP%="%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% -D%ENDORSED_PROP%="%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
    
    
  • 相关阅读:
    EF架构~简洁关联表插入,优越的代码性能!
    基础才是重中之重~你是否真正了解TransactionScope?
    基础才是重中之重~如何整理BLL与DAL层的文件
    java Byte 和byte 差别及byte[ ]和string转换
    转: java的InputStream和OutputStream的理解
    java.awt.list java.util.list 区别
    java.util.Scanner 总结
    java .io OutputStream 与InputStream
    java 3中方法复制一个文件
    网络爬虫 简介
  • 原文地址:https://www.cnblogs.com/kibana/p/9261348.html
Copyright © 2011-2022 走看看