Tomcat配置文件详解


startup.bat详解

if “%OS%” == “Windows_NT” setlocal //判断当前系统是否是window系统

rem --------------------------------------------------------------------------- //rem 是注释(下同)

rem Start script for the CATALINA Server

rem

rem $Id: startup.bat 302918 2004-05-27 18:25:11Z yoavs $

rem ---------------------------------------------------------------------------

rem Guess CATALINA_HOME if not defined

set CURRENT_DIR=%cd% //设置当前目录

if not “%CATALINA_HOME%” == “” gotogotHome //如果设置了CATALINA_HOME环境变量 ,就直接到下面的gotHome处

set CATALINA_HOME=%CURRENT_DIR% //如果没有设置CATALINA_HOME,就设置CATALINA_HOME为当前目录(其实这里她假设你进入tomcat的安装目录)

if exist “%CATALINA_HOME%\bin\catalina.bat” gotookHome//判断一下catalina.bat是否找到了,找到了就直接到下面的gotHome处

cd … //这里他是假设你开始已经进入到了tomcat的bin目录,所以就退到上一级目录

set CATALINA_HOME=%cd%//现在再设置CATALINA_HOME为tomcat的安装目录

cd %CURRENT_DIR% //这里是进入dos的当前目录

:gotHome

if exist “%CATALINA_HOME%\bin\catalina.bat” gotookHome //再次判断catalina.bat是否找到了,找到了就直接到下面的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%” gotookExec //再次判断catalina.bat是否找到了,找到了就直接到下面的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"“==”“”" gotodoneSetArgs //判断参数是否加入完成

set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 //将参数组成一行,接在后面

shift

gotosetArgs

:doneSetArgs

call “%EXECUTABLE%” start %CMD_LINE_ARGS% //执行catalina.bat,最好将这行改为:echo “%EXECUTABLE%” start %CMD_LINE_ARGS% 以便阅读、理解本文件的作用

:end

//这个批处理文件,主要是正确的找到catalina.bat,并且执行。

当把tomcat解压到一个地方时,通常是设置一个CATALINA_HOME的环境变量,执行这个文件时,就很容易找到 catalina.bat
如果没有设置CATALINA_HOME的环境变量,那么你需要在dos中进入tomcat的安装目录,或者bin…子目录,再执行这个文件,如果在其他目录,将会出现提示找不到文件。

修改startup.bat,使其不依赖JAVA_HOM和CATALINA_HOME变量的方法:

SET JAVA_HOME=JDK目录
SET CATALINA_HOME=解压后Tomcat的目录

例如:

set JAVA_HOME=D:\Program Files\java\jdk1.6.0_21

set CATALINA_HOME=D:\Program Files\apache-tomcat-6.0.29

server.xml详解

<?xml version="1.0" encoding="UTF-8"?>
<!--代表整个Servlet容器组件,是最顶层元素。它里面可以有多个Service标签-->
<Server port="8005" shutdown="SHUTDOWN">
    <!--Tomcat运行所需的监听器-->
    <!--默认的生命周期监听器:在server初始化之前打印操作系统、JVM及服务器的版本信息-->
    <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
    <!-- 默认的生命周期监听器:在server初始化之前加载APR库,并在server停止后销毁 -->
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
    <!-- 默认的生命周期监听器:server初始化之前调用,解决单例对象创建导致的jVM内存泄露问题以及锁文件问题 -->
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    <!-- 默认的生命周期监听器:Server启动时将JNDI资源注册为MBean进行管理 -->
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    <!-- 默认的生命周期监听器:在context停止时重建Executor池中的线程,避免内存泄露 -->
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
    <!--全局资源配置, 解析到此节点时开始创建JNDI上下文 -->
    <GlobalNamingResources>
        <Resource name="UserDatabase" auth="Container"
                  type="org.apache.catalina.UserDatabase"
                  description="User database that can be updated and saved"
                  factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                  pathname="conf/tomcat-users.xml" />
    </GlobalNamingResources>
    <!--配置的是Tomcat的服务包含<Engine>元素和<Connector>元素。其中<Connector>可以是一个,也可以是多个,且他们共享引擎<Engine>的配置-->
    <Service name="Catalina">
        <!-- 配置共享线程池:默认的线程池实现为StandardThreadExecutor,可以通过标签的className属性指定Catalina共享线程池的级别为Service,默认情况下不配置共享线程池-->
        <!-- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/>-->

        <!--配置的是连接器,其中包括连接的端口和使用协议
            port:指定端口号
            protocol:指定协议名称
            connectionTimeout:连接超时时间
            redirectPort:当资源必须以https协议访问时,tomcat会重定向此端口访问。
        -->
        <Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000" redirectPort="8443" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
        <!--配置引擎
            name:引擎名称
            defaultHost:虚拟主机的引用-->
        <Engine name="Catalina" defaultHost="localhost">
            <!--配置Tomcat的Realm域,安全空间-->
            <Realm className="org.apache.catalina.realm.LockOutRealm">
                <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
            </Realm>
            <!--配置虚拟主机。
                   name:主机名称
                   appBase:应用默认发布目录
                   unpackWARs:是否自动解压war包
                   autoDeploy:是否自动发布-->
            <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
                <!-- 日志的valve拦截 -->
                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                       prefix="localhost_access_log" suffix=".txt"
                       pattern="%h %l %u %t &quot;%r&quot; %s %b" />
                <!--配置具体应用项目。
                    docBase是项目的位置,可以是绝对路径,也可以是相对路径。如果是相对路径,则必须发布在虚拟主机的应用默认发布目录下。
                    path是指定访问该Web应用的URI
                    reloadable是指定是否重新加载/WEB-INF/classes和/WEB-INF/lib目录下改动后的内容-->
                <!--<Context docBase="tomcat" path="/tomcat" reloadable="true"/>-->
            </Host>
        </Engine>
    </Service>
</Server>

web.xml讲解


<web-app>    
<display-name></display-name>定义了WEB应用的名字    
 
<description></description> 声明WEB应用的描述信息    
 
<context-param></context-param> context-param元素声明应用范围内的初始化参数。    
 
<filter></filter> 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。    
<filter-mapping></filter-mapping> 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。 
 
<listener></listener>servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知.Listener元素指出事件监听程序类。    
 
<servlet></servlet> 在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。    
 
<servlet-mapping></servlet-mapping> 服务器一般为servlet提供一个缺省的URL:http://host/webAppPrefix/servlet/ServletName。    
 
但是,常常会更改这个URL,以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时,使用servlet-mapping元素。    
 
<session-config></session-config> 如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。    
 
可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元素制定缺省超时值。    
 
<mime-mapping></mime-mapping>如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证。
 
<welcome-file-list></welcome-file-list> 指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。  
 
<error-page></error-page> 在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。    
 
<taglib></taglib> 对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。此功能使你能够更改TLD文件的位置,而不用编辑使用这些文件的JSP页面。  
 
<resource-env-ref></resource-env-ref>声明与资源相关的一个管理对象。 
 
<resource-ref></resource-ref> 声明一个资源工厂使用的外部资源。
 
<security-constraint></security-constraint> 制定应该保护的URL。它与login-config元素联合使用   
 
<login-config></login-config> 指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。  
 
<security-role></security-role>给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。  
 
<env-entry></env-entry>声明Web应用的环境项。 
 
<ejb-ref></ejb-ref>声明一个EJB的主目录的引用。 
 
< ejb-local-ref></ ejb-local-ref>声明一个EJB的本地主目录的应用。   
 
</web-app>  

Catalina.bat详解


Catalina.bat是tomcat所有脚本中最重要的脚本,完成几乎所有的tomcat操作。如启动,关闭等等,都是由catalina.bat脚本来完成的。接下来,我将对Tomcat catalina.bat脚本进行分析。 

    首先省去catalina.bat开头诸多注解,这些注解主要是讲解各个变量是干什么的。需要的话,自己看下英文就可以了。这里就不翻译了。 

rem Guess CATALINA_HOME if not defined  查看是否在tomcat目录下,与startup.bat里相同,不解释了。需要的话可以看我的另一篇博客。 
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" 如果存在setenv.bat脚本,调用它,我的tomcat 没有这个脚本 

rem Get standard Java environment variables 
if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath 查看是否存在setclasspath.bat脚本,如果存在,转到okSetclasspath位置 
echo Cannot find %CATALINA_HOME%\bin\setclasspath.bat 否则输出下面两行,并退出 
echo This file is needed to run this program 
goto end 
:okSetclasspath    okSetclasspath位置 

set BASEDIR=%CATALINA_HOME%   设定BASEDIR变量与CATALINA_HOME变量值相同 
call "%CATALINA_HOME%\bin\setclasspath.bat" %1   调用setclasspath.bat脚本并加上参数 
if errorlevel 1 goto end      如果存在错误 退出 

rem Add on extra jar files to CLASSPATH   设定JSSE_HOME变量,如果存在加入CLASSPATH,不存在跳过 

if "%JSSE_HOME%" == "" goto noJsse    检查是否存在JSSE_HOME变量 
set CLASSPATH=%CLASSPATH%;%JSSE_HOME%\lib\jcert.jar;%JSSE_HOME%\lib\jnet.jar;%JSSE_HOME%\lib\jsse.jar 如果有加入到CLASSPATH变量后面 
:noJsse                                   
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar  将bootstrap.jar加入到CLASSPATH里 

if not "%CATALINA_BASE%" == "" goto gotBase  如果CATALINA_BASE变量不为空,跳过,转到gotBase位置 
set CATALINA_BASE=%CATALINA_HOME%  如果为空,将CATALINA_BASE设为CATALINA_HOME变量的值 
:gotBase 

if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir   CATALINA_TMPDIR不为空,跳过,转到gotTmpdir位置 
set CATALINA_TMPDIR=%CATALINA_BASE%\temp   如果为空,将 CATALINA_TMPDIR设为%CATALINA_BASE%\temp变量的值(即tomcat\temp) 
:gotTmpdir 

if not exist "%CATALINA_HOME%\bin\tomcat-juli.jar" goto noJuli  如果不存在tomcat-juli.jar这个类,转到noJuli位置 
set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager - Djava.util.logging.config.file="%CATALINA_BASE%\conf \logging.properties"  如果存在,将变量加入到JAVA_OPTS里 
:noJuli 


set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -Dfile .encoding=UTF8 -Duser.timezone=GMT -Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.config  设定JAVA_OPTS变量 

echo Using CATALINA_BASE:   %CATALINA_BASE%     输出CATALINA_BASE变量值 
echo Using CATALINA_HOME:   %CATALINA_HOME%     输出CATALINA_HOME变量值 
echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR% 输出CATALINA_TMPDIR变量值 
if ""%1"" == ""debug"" goto use_jdk        如果变量%1里存在debug ,转到use_jdk位置 
echo Using JRE_HOME:        %JRE_HOME%     输出JRE_HOME变量值 
goto java_dir_displayed      转到java_dir_displayed 
:use_jdk 
echo Using JAVA_HOME:       %JAVA_HOME%    输出JAVA_HOME变量值 
:java_dir_displayed 
                        下面几行设定相应变量 
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 
if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend 
set JPDA_SUSPEND=n 
:gotJpdaSuspend 
if not "%JPDA_OPTS%" == "" goto gotJpdaOpts 
set JPDA_OPTS=-Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
:gotJpdaOpts 
shift 
:noJpda 

if ""%1"" == ""debug"" goto doDebug    如果%1为debug,转到doDebug,运行debug模式 
if ""%1"" == ""run"" goto doRun        如果%1为run,转到doRun,运行正常模式 
if ""%1"" == ""start"" goto doStart    如果%1为start,转到doStart,启动tomcat 
if ""%1"" == ""stop"" goto doStop      如果%1为stop,转到doStop,关闭tocmat 
if ""%1"" == ""version"" goto doVersion 如果%1为version,转到doVersion,显示tomcat的版本号 

echo Usage:  catalina ( commands ... ) 如果%1没有上述内容,输出下面几行,并结束 
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                    将%2里的值转到%1 
set _EXECJAVA=%_RUNJDB%  将变量 _EXECJAVA设为_RUNJDB变量的值 
set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\jakarta-tomcat-catalina\catalina\src\share"  
设定DEBUG_OPTS变量 

if not ""%1"" == ""-security"" goto execCmd    
如果%1不为-security,转到execCmd位置 

shift       将%2里的值转到%1 
echo Using Security Manager       输出该行 
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy 
设定SECURITY_POLICY_FILE变量的值 

goto execCmd     转到execCmd位置 

:doRun 
shift        将%2里的值转到%1 
if not ""%1"" == ""-security"" goto execCmd   如果%1不为-security,转到execCmd位置 
shift        将%2里的值转到%1 
echo Using Security Manager   输出该行 
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy 
设定SECURITY_POLICY_FILE变量的值 

goto execCmd  转到execCmd位置 

:doStart 
shift        将%2里的值转到%1 
if not "%OS%" == "Windows_NT" goto noTitle  如果OS变量不为Windows_NT,转到noTitle 
set _EXECJAVA=start "Tomcat" %_RUNJAVA%       设定_EXECJAVA变量的值 
goto gotTitle      转到gotTitle位置 
:noTitle 
set _EXECJAVA=start %_RUNJAVA%    设定 _EXECJAVA 变量的值 
:gotTitle               
if not ""%1"" == ""-security"" goto execCmd   如果%1不为-security,转到execCmd位置 
shift                    将%2里的值转到%1 
echo Using Security Manager        输出该行 
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy   
设定SECURITY_POLICY_FILE变量的值 

goto execCmd       转到execCmd位置 

:doStop 
shift                 将%2里的值转到%1 
set ACTION=stop       将ACTION的变量设为stop 
set CATALINA_OPTS=    设CATALINA_OPTS为空 

goto execCmd          转到execCmd位置 

:doVersion            显示tomcat版本号 
%_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 
以下几行将命令参数存入CMD_LINE_ARGS变量中 

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        如果JPDA变量不为空,转到doJpda位置 
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity 
如果SECURITY_POLICY_FILE变量不为空,转到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   
如果SECURITY_POLICY_FILE变量不为空,转到doSecurityJpda位置,为空执行下面命令,并结束该程序   

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda 
%_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% 
goto end 
:doSecurityJpda  执行下面命令,并结束该程序 
%_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% 
goto end 

:end 

终结: 

   catalina.bat咋一看还以为是什么windows程序,可以双击运行,实际上就是调用java命令运行Bootstrap类。从上面代码可以看 出tomcat确实是一个纯java的程序,脚本最后都变成直接使用java命令执行程序,与我们普通写的java程序,没有什么不同。只不过由于 tomcat可以使用各种众多的模式(如debug,Security等),以及各种需要各种参数所以不得不使用脚本来执行。 

如果你想看看你到底使用了什么命令可以在“if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity”这行下面添加两行。 
       echo  %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dir ....(下面那段,是一行但太长,折行了) 
       pause 
   第一行的命令是打印这具话,系统会将% %里面的变量提换成找到的值并输出。第二行是暂停程序,你可以通过任意键来恢复运行。 
   下面是我的程序打印的结果: 

start "Tomcat" "C:\Program Files\Java\jdk1.6.0_01\bin\java"  -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="C:\work\tomcat\conf\logging.properties" -Xms128m -Xmx512m -Dfile.encoding=UTF8 -Duser.timezone=GMT -Djava.security.auth.login.config=C:\work\tomcat/conf/jaas.config   -Djava.endorsed.dirs="C:\work\tomcat\common\endorsed" -classpath "C:\Program Files\Java\jdk1.6.0_01\lib\tools.jar;C:\work\tomcat\bin\bootstrap.jar" -Dcatalina.base="C:\work\tomcat" -Dcatalina.home="C:\work\tomcat" -Djava.io.tmpdir="C:\work\tomcat\temp" org.apache.catalina.startup.Bootstrap  start 

    start "tomcat"是另开一个窗口,窗口名是tomcat的意思,你可以去掉这部分,完将你程序打印的拷贝到命令行下,点回车,看是不是一样运行 tomcat了。Catalina.bat startup实际时就将各种系统变量加以总结,输出成这个命令。   呵呵!

 

 

 

=========================================================================

在安装版的Tomcat中没有catalina.bat,实际上这些catalina.bat的设置都是对注册表的修改,对应的注册表键值如下

HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\Java\Options

=========================================================================

在使用MyEclipse+Tomcat发布项目的时候通常会给如下提示信息:[org.apache.catalina.core.AprLifecycleListener]-[INFO] The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: (...你的系统环境PATH路径...)

在停止时发现出现如下信息 
[org.apache.catalina.core.AprLifecycleListener]-[INFO] Failed shutdown of Apache Portable Runtime

解决:Windows下的安装配置与使用 
1、先去 http://tomcat.heanet.ie/native/ 下载编译好的 tcnative-1.dll 文件,也可以下载tomcat-native.zip自己进行编译 
2、修改一下 catalina.bat,加上 
  set CATALINA_OPTS="-Djava.library.path=../../APR/lib" 
因为我把这个DLL放在与Tomcat目录同级的APR/lib目录下,所以采用了相对路径。或者把dll加到你的系统变量PATH里之类的,最简单的方法应当就是把tcnative-1.dll文件放在Tomcat的bin目录下:) 

这样设置后,启动可以看到信息如下: 
[org.apache.coyote.http11.Http11AprProtocol]-[INFO] Initializing Coyote HTTP/1.1 on http-9091 
在停止时发现出现如下信息 
[org.apache.coyote.http11.Http11AprProtocol]-[INFO] Pausing Coyote HTTP/1.1 on http-9091 
...... 
[org.apache.coyote.http11.Http11AprProtocol]-[INFO] Stopping Coyote HTTP/1.1 on http-9091 

这样就配置成功了。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值