﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-javaGrowing-随笔分类-tomcat</title><link>http://www.blogjava.net/juhongtao/category/11079.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 06:54:06 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 06:54:06 GMT</pubDate><ttl>60</ttl><item><title>Tomcat5下server.xml的翻译</title><link>http://www.blogjava.net/juhongtao/archive/2006/10/17/75617.html</link><dc:creator>javaGrowing</dc:creator><author>javaGrowing</author><pubDate>Tue, 17 Oct 2006 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/juhongtao/archive/2006/10/17/75617.html</guid><wfw:comment>http://www.blogjava.net/juhongtao/comments/75617.html</wfw:comment><comments>http://www.blogjava.net/juhongtao/archive/2006/10/17/75617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/juhongtao/comments/commentRss/75617.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/juhongtao/services/trackbacks/75617.html</trackback:ping><description><![CDATA[	
	&lt;!-- Example Server Configuration File --&gt;
<br />&lt;!-- Tomcat<a class="channel_keylink" href="http://www.661100.net/BCKF/ShowClass.asp?ClassID=324" target="_blank">服务器</a>配置示例文件 --&gt;
<br /><br />&lt;!-- Note that component elements are nested corresponding to their
<br />     parent-child relationships with each other --&gt;
<br />&lt;!-- 注意，这些组件的构成是根据相互之间的父子关系进行嵌套的。--&gt;
<br /><br />&lt;!-- A "Server" is a singleton element that represents the entire JVM,
<br />     which may contain one or more "Service" instances. The Server
<br />     listens for a shutdown command on the indicated port.
<br /><br />     Note: A "Server" is not itself a "Container", so you may not
<br />     define subcomponents such as "Valves" or "Loggers" at this level.
<br /> --&gt;
<br />&lt;!-- 一个“Server”是一个提供完整的JVM的独立组件，它可以包含一个或多个
<br />     “Service”实例。<a class="channel_keylink" href="http://www.661100.net/BCKF/ShowClass.asp?ClassID=324" target="_blank">服务器</a>在指定的端口上监听shutdown命令。
<br />     
<br />     注意：一个“Server”自身不是一个“Container”（容器），因此在这里你
<br />     不可以定义诸如“Valves”或者“Loggers”子组件
<br />--&gt;
<br /><br />&lt;Server port="8005" shutdown="SHUTDOWN" debug="0"&gt;
<br /><br /><br />  &lt;!-- Comment these entries out to disable JMX MBeans support --&gt;
<br />  &lt;!-- 这些指令组件关闭JMX MBeans支持 --&gt;
<br />  
<br />  &lt;!-- You may also configure custom components (e.g. Valves/Realms) by 
<br />       including your own mbean-descriptor file(s), and setting the 
<br />       "descriptors" attribute to point to a ';' seperated list of paths
<br />       (in the ClassLoader sense) of files to add to the default list.
<br />       e.g. descriptors="/com/myfirm/mypackage/mbean-descriptor.xml"
<br />  --&gt;
<br />  &lt;!-- 你也可以通过包含你自己的mbean描述文件配置自定义的组件，然后设置
<br />       “descriptors”属性为以“；”为分隔的文件名列表严将它添加到默认列表
<br />       中，例如：descriptors="/com/myfirm/mypackage/mbean-descriptor.xml"。
<br /> --&gt;
<br />       
<br />  &lt;Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
<br />            debug="0"/&gt;
<br />  &lt;Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
<br />            debug="0"/&gt;
<br /><br />  &lt;!-- Global JNDI resources --&gt;
<br />  &lt;!-- 全局JNDI资源 --&gt;
<br />  &lt;GlobalNamingResources&gt;
<br /><br />    &lt;!-- Test entry for demonstration purposes --&gt;
<br />    &lt;!-- 出于示例目的的测试入口 --&gt;
<br />    &lt;Environment name="simpleValue" type="java.lang.Integer" value="30"/&gt;
<br /><br />    &lt;!-- Editable user database that can also be used by
<br />         UserDatabaseRealm to authenticate users --&gt;
<br />    &lt;!-- 可编辑的，用来通过UserDatabaseRealm认证用户的用户数据库 --&gt;
<br />    
<br />    &lt;Resource name="UserDatabase" auth="Container"
<br />              type="org.apache.catalina.UserDatabase"
<br />       description="User database that can be updated and saved"&gt;
<br />    &lt;/Resource&gt;
<br />    &lt;ResourceParams name="UserDatabase"&gt;
<br />      &lt;parameter&gt;
<br />        &lt;name&gt;factory&lt;/name&gt;
<br />        &lt;value&gt;org.apache.catalina.users.MemoryUserDatabaseFactory&lt;/value&gt;
<br />      &lt;/parameter&gt;
<br />      &lt;parameter&gt;
<br />        &lt;name&gt;pathname&lt;/name&gt;
<br />        &lt;value&gt;conf/tomcat-users.xml&lt;/value&gt;
<br />      &lt;/parameter&gt;
<br />    &lt;/ResourceParams&gt;
<br /><br />  &lt;/GlobalNamingResources&gt;
<br /><br />  &lt;!-- A "Service" is a collection of one or more "Connectors" that share
<br />       a single "Container" (and therefore the web applications visible
<br />       within that Container). Normally, that Container is an "Engine",
<br />       but this is not required.
<br /><br />       Note: A "Service" is not itself a "Container", so you may not
<br />       define subcomponents such as "Valves" or "Loggers" at this level.
<br />   --&gt;
<br />  &lt;!-- 一个“Service”是一个或多个共用一个单独“Container”(容器)的“Connectors”
<br />       组合（因此，应用程序在容器中可见）。通常，这个容器是一个“Engine”
<br />       （引擎），但这不是必须的。
<br />       
<br />       注意：一个“Service”自身不是一个容器，因此，在这个级别上你不可定义
<br />       诸如“Valves”或“Loggers”子组件。
<br />  --&gt;
<br /><br />  &lt;!-- Define the Tomcat Stand-Alone Service --&gt;
<br />  &lt;!-- 定义Tomcat的标准独立服务 --&gt;
<br />  &lt;Service name="Catalina"&gt;
<br /><br />    &lt;!-- A "Connector" represents an endpoint by which requests are received
<br />         and responses are returned. Each Connector passes requests on to the
<br />         associated "Container" (normally an Engine) for processing.
<br /><br />         By default, a non-SSL HTTP/1.1 Connector is established on port 8080.
<br />         You can also enable an SSL HTTP/1.1 Connector on port 8443 by
<br />         following the instructions below and uncommenting the second Connector
<br />         entry. SSL support requires the following steps (see the SSL Config
<br />         HOWTO in the Tomcat 5 documentation bundle for more detailed
<br />         instructions):
<br />         * If your JDK version 1.3 or prior, download and install JSSE 1.0.2 or
<br />           later, and put the JAR files into "$JAVA_HOME/jre/lib/ext".
<br />         * Execute:
<br />             %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)
<br />             $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA (Unix)
<br />           with a password value of "changeit" for both the certificate and
<br />           the keystore itself.
<br /><br />         By default, DNS lookups are enabled when a web application calls
<br />         request.getRemoteHost(). This can have an adverse impact on
<br />         performance, so you can disable it by setting the
<br />         "enableLookups" attribute to "false". When DNS lookups are disabled,
<br />         request.getRemoteHost() will return the String version of the
<br />         IP address of the remote client.
<br />    --&gt;
<br />    &lt;!-- 一个“Connector”（连接器）代表一个请求被接收和应答所需要的端点。每个连
<br />         接器通过相关的“Container”（容器）处理请求。
<br />         
<br />         默认情况下，一个非SSL的HTTP/1.1的连接器被绑定在端口8080。你也可以通过
<br />         根据后面的使用说明并取消第二个连接器入口的注释，在端口8443上建立一个
<br />         SSL HTTP/1.1的连接器。开放SSL支持需要下面几步（参见Tomcat 5文档中怎样
<br />         配置SSL的说明以取得更多的详细信息）：
<br />         * 如果你的JDK是1.3或1.3以前的版本，下载安装JSSE 1.0.2或以后版本，并放
<br />           置JAR文件到“$JAVA_HOME/jre/lib/ext”目录下。
<br />         * 带一个“changeit”的口令值执行：
<br />             %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)
<br />             $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA (UNIX)
<br />           来生成它自己的证书私钥。
<br />           
<br />         默认情况下，当一个web应用程序调用请求时，DNS查询是可行的。这将对性能造
<br />         成一些不利的影响，因此，你可以将“enableLookups”设置为“false”来关闭DNS
<br />         查询。当DNS查询被关闭时，request.getRemoteHost()将返回包含远程客户IP地
<br />         址的字符串。
<br />  --&gt;
<br /><br />    &lt;!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 --&gt;
<br />    &lt;!-- 在8080端口上定义一个非SSL的HTTP/1.1连接器 --&gt;
<br />    &lt;Connector port="8080"
<br />               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
<br />               enableLookups="false" redirectPort="8443" acceptCount="100"
<br />               debug="0" connectionTimeout="20000" 
<br />               disableUploadTimeout="true" /&gt;
<br />    &lt;!-- Note : To disable connection timeouts, set connectionTimeout value
<br />     to 0 --&gt;
<br />    &lt;!-- 注意，要关闭连接超时，将connectionTimeout设置为0 --&gt;
<br /><br />&lt;!-- Note : To use gzip compression you could set the following properties :
<br /><br />compression="on" 
<br />compressionMinSize="2048" 
<br />noCompressionUserAgents="gozilla, traviata" 
<br />compressableMimeType="text/html,text/xml"
<br />--&gt;
<br />&lt;!-- 注意：要使用gzip压缩需要设置如下属性：
<br /><br />compression="on"
<br />compressionMinSize="2048"
<br />noCompressionUserAgents="gozilla,traviata"
<br />compressableMimeType="text/html,text/xml"
<br />--&gt;
<br /><br />    &lt;!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 --&gt;
<br />    &lt;!-- 在端口8443上定义一个SSL的HTTP/1.1的连接器 --&gt;
<br />    &lt;!--
<br />    &lt;Connector port="8443" 
<br />               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
<br />               enableLookups="false" disableUploadTimeout="true"
<br />               acceptCount="100" debug="0" scheme="https" secure="true"
<br />               clientAuth="false" sslProtocol="TLS" /&gt;
<br />    --&gt;
<br /><br />    &lt;!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 --&gt;
<br />    &lt;!-- 在端口8009上定义一个Coyote/JK2 AJP 1.3连接器 --&gt;
<br />    &lt;Connector port="8009" 
<br />               enableLookups="false" redirectPort="8443" debug="0"
<br />               protocol="AJP/1.3" /&gt;
<br /><br />    &lt;!-- Define a Proxied HTTP/1.1 Connector on port 8082 --&gt;
<br />    &lt;!-- 在8082端口上定义一个代理HTTP/1.1连接器 --&gt;
<br />    &lt;!-- See proxy documentation for more information about using this. --&gt;
<br />    &lt;!-- 参见代理文档以取得这里使用属性的更多的信息。 --&gt;
<br />    &lt;!--
<br />    &lt;Connector port="8082" 
<br />               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
<br />               enableLookups="false"
<br />               acceptCount="100" debug="0" connectionTimeout="20000"
<br />               proxyPort="80" disableUploadTimeout="true" /&gt;
<br />    --&gt;
<br /><br />    &lt;!-- An Engine represents the entry point (within Catalina) that processes
<br />         every request. The Engine implementation for Tomcat stand alone
<br />         analyzes the HTTP headers included with the request, and passes them
<br />         on to the appropriate Host (virtual host). --&gt;
<br />    &lt;!-- 一个“Engine”（引擎）代表处理每个请求的入口点（在Catalina内）。这个Tomcat
<br />         的标准独立引擎实现分析包含在请求中的HTTP头信息，并将请求传送到适当的主机
<br />         或虚拟主机上。--&gt;
<br /><br />    &lt;!-- You should set jvmRoute to support load-balancing via JK/JK2 ie :
<br />    &lt;Engine name="Standalone" defaultHost="localhost" debug="0" jvmRoute="jvm1"&gt; 
<br />    --&gt; 
<br />    &lt;!-- 你应该这样设置jvmRoute以便在JK/JK2通道上支持负载平衡：
<br />    &lt;Engine name="Standalone" defaultHost="localhost" debug="0" jvmRoute="jvm1"&gt;
<br />    --&gt;
<br />         
<br />    &lt;!-- Define the top level container in our container hierarchy --&gt;
<br />    &lt;!-- 在我们的容器体系中定义最高级别的容器 --&gt;
<br />    &lt;Engine name="Catalina" defaultHost="localhost" debug="0"&gt;
<br /><br />      &lt;!-- The request dumper valve dumps useful debugging information about
<br />           the request headers and cookies that were received, and the response
<br />           headers and cookies that were sent, for all requests received by
<br />           this instance of Tomcat. If you care only about requests to a
<br />           particular virtual host, or a particular application, nest this
<br />           element inside the corresponding &lt;Host&gt; or &lt;Context&gt; entry instead.
<br /><br />           For a similar mechanism that is portable to all Servlet 2.4
<br />           containers, check out the "RequestDumperFilter" Filter in the
<br />           example application (the source for this filter may be found in
<br />           "$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters").
<br /><br />           Request dumping is disabled by default. Uncomment the following
<br />           element to enable it. --&gt;
<br />      &lt;!-- 请求转储器值转储非常有用的通过Tomcat这个实例接收到的所有请求的，关于
<br />           接收到的请求头和cookies，以及发送出的回应头和cookies的调试信息。如果
<br />           你只在意一个特定的虚拟主机或者一个特定应用程序的请求，在对应的&lt;Host&gt;
<br />           或&lt;Context&gt;入口中套用这个元素。
<br />           
<br />           对于所有的Servlet（小服务程序）2.4来所，在示例程序中检验
<br />           “RequestDumperFilter”过滤是非常容易的（这个过滤器源代码可以在
<br />           “$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters”下找到。
<br />           
<br />           请求转储默认情况下是关闭的，如果要使用它，取消下面行的注释符。--&gt;
<br />      &lt;!--
<br />      &lt;Valve className="org.apache.catalina.valves.RequestDumperValve"/&gt;
<br />      --&gt;
<br /><br />      &lt;!-- Global logger unless overridden at lower levels --&gt;
<br />      &lt;!-- 全局日志设置，除非在更低的级别上覆盖它的设置 --&gt;
<br />      &lt;Logger className="org.apache.catalina.logger.FileLogger"
<br />              prefix="catalina_log." suffix=".txt"
<br />              timestamp="true"/&gt;
<br /><br />      &lt;!-- Because this Realm is here, an instance will be shared globally --&gt;
<br />      &lt;!-- 因为这个Realm（区域）在这儿，因此这个实例将被全局共享。 --&gt;
<br /><br />      &lt;!-- This Realm uses the UserDatabase configured in the global JNDI
<br />           resources under the key "UserDatabase". Any edits
<br />           that are performed against this UserDatabase are immediately
<br />           available for use by the Realm. --&gt;
<br />      &lt;!-- 这个Realm（区域）使用在全局JNDI资源下，由“UserDatabase”配置的用户
<br />           数据库。通过使用Realm将使对于这个用户数据库的任何编辑都将会立即可用
<br />      &lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"
<br />                 debug="0" resourceName="UserDatabase"/&gt;
<br /><br />      &lt;!-- Comment out the old realm but leave here for now in case we
<br />           need to go back quickly --&gt;
<br />      &lt;!-- 注释掉旧有的Realm以便我们能很快速的恢复旧有配置。 --&gt;
<br />      &lt;!--
<br />      &lt;Realm className="org.apache.catalina.realm.MemoryRealm" /&gt;
<br />      --&gt;
<br /><br />      &lt;!-- Replace the above Realm with one of the following to get a Realm
<br />           stored in a database and accessed via JDBC --&gt;
<br />      &lt;!-- 下面的属性用于从储存在数据库或从JDBC通道中得到的Realm以取代上面的
<br />           Realm配置。--&gt;
<br /><br />      &lt;!--
<br />      &lt;Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
<br />             driverName="org.gjt.mm.mysql.Driver"
<br />          connectionURL="jdbc:mysql://localhost/authority"
<br />         connectionName="test" connectionPassword="test"
<br />              userTable="users" userNameCol="user_name" userCredCol="user_pass"
<br />          userRoleTable="user_roles" roleNameCol="role_name" /&gt;
<br />      --&gt;
<br /><br />      &lt;!--
<br />      &lt;Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
<br />             driverName="oracle.jdbc.driver.<a class="channel_keylink" href="http://www.661100.net/BCKF/ShowClass.asp?ClassID=16" target="_blank">Oracle</a>Driver"
<br />          connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"
<br />         connectionName="scott" connectionPassword="tiger"
<br />              userTable="users" userNameCol="user_name" userCredCol="user_pass"
<br />          userRoleTable="user_roles" roleNameCol="role_name" /&gt;
<br />      --&gt;
<br /><br />      &lt;!--
<br />      &lt;Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
<br />             driverName="sun.jdbc.odbc.JdbcOdbcDriver"
<br />          connectionURL="jdbc:odbc:CATALINA"
<br />              userTable="users" userNameCol="user_name" userCredCol="user_pass"
<br />          userRoleTable="user_roles" roleNameCol="role_name" /&gt;
<br />      --&gt;
<br /><br />      &lt;!-- Define the default virtual host
<br />           Note: XML Schema validation will not work with Xerces 2.2.
<br />       --&gt;
<br />      &lt;!-- 定义默认的虚拟主机
<br />           注意：XML模式确认将不能与Xerces 2.2同工作。
<br />      --&gt;
<br />      &lt;Host name="localhost" debug="0" appBase="webapps"
<br />       unpackWARs="true" autoDeploy="true"
<br />       xmlValidation="false" xmlNamespaceAware="false"&gt;
<br /><br />        &lt;!-- Defines a cluster for this node,
<br />             By defining this element, means that every manager will be changed.
<br />             So when running a cluster, only make sure that you have webapps in there
<br />             that need to be clustered and remove the other ones.
<br />             A cluster has the following parameters:
<br />             为这个结点定义一个群集，通过定义这个元素，意味着每个管理员都将被改变。
<br />             因此，当运行一个群集时，只有确认在必须被聚集和移除其他的地方有你的
<br />             web软件。
<br />             一个群集有下面这些参数：
<br /><br />             className = the fully qualified name of the cluster class
<br />             className = 这个群集类的全限定名
<br /><br />             name = a descriptive name for your cluster, can be anything
<br />             name = 你的群集的描述名，可以是任何描述
<br /><br />             debug = the debug level, higher means more output
<br />             debug = 调试级别，更高意味着更多的输出
<br /><br />             mcastAddr = the multicast address, has to be the same for all the nodes
<br />             mcastAddr = 多播地址，所有的节点都必须有同样的多播地址
<br /><br />             mcastPort = the multicast port, has to be the same for all the nodes
<br />             mcastPort = 多播端口，对所有的节点都必须有同样的多播端口
<br />             
<br />             mcastBindAddr = bind the multicast socket to a specific address
<br />             mcastBindAddr = 绑定多播套接字到一个指定的地址
<br />             
<br />             mcastTTL = the multicast TTL if you want to limit your broadcast
<br />             mcastTTL = 多播生存期，如果你想要限制你的广播的话
<br />             
<br />             mcastSoTimeout = the multicast readtimeout
<br />             mcastSoTimeout = 多播读取超时
<br /><br />             mcastFrequency = the number of milliseconds in between sending a "I'm alive" heartbeat
<br />             mcastFrequency = 发送“I'm alive”（我还活着）信息的间隔毫秒数
<br /><br />             mcastDropTime = the number a milliseconds before a node is considered "dead" if no heartbeat is received
<br />             mcastDropTime = 多长时间没有收到“I'm alive”就将这个节点标识为死节点（单位：毫秒）
<br /><br />             tcpThreadCount = the number of threads to handle incoming replication requests, optimal would be the same amount of threads as nodes 
<br />             tcpThreadCount = 用于处理重复引入请求的线程数，最好是每个节点都有相同的线程数
<br /><br />             tcpListenAddress = the listen address (bind address) for TCP cluster request on this host, 
<br />                                in case of multiple ethernet cards.
<br />                                auto means that address becomes
<br />                                InetAddress.getLocalHost().getHostAddress()
<br />             tcpListenAddress = 在有多块以太<a class="channel_keylink" href="http://www.661100.net/YJWX/ShowClass.asp?ClassID=191" target="_blank">网卡</a>的主机上的监听TCP群集请求的地址（绑定地址），
<br />                                auto意味着地址由InetAddress.getLocalHost().getHostAddress()取得。
<br /><br />             tcpListenPort = the tcp listen port
<br />             tcpListenPort = tcp监听端口
<br /><br />             tcpSelectorTimeout = the timeout (ms) for the Selector.select() method in case the OS
<br />                                  has a wakup bug in java.nio. Set to 0 for no timeout
<br />             tcpSelectorTimeout = 在<a class="channel_keylink" href="http://www.661100.net/CZXT/Index.asp" target="_blank">操作系统</a>中有java.nio唤醒错的情况下，使用Selector.select()的超时
<br />                                  毫秒数。设为0则没有超时限制
<br /><br />             printToScreen = true means that managers will also print to std.out
<br />             printToScreen = true意味着管理员的相关信息也将打印输出到std.out
<br /><br />             expireSessionsOnShutdown = true means that
<br />             expireSessionsOnShutdown = true 意味着?????
<br /><br />             useDirtyFlag = true means that we only replicate a session after setAttribute,removeAttribute has been called.
<br />                            false means to replicate the session after each request.
<br />                            false means that replication would work for the following piece of code:
<br />                            &lt;%
<br />                            HashMap map = (HashMap)session.getAttribute("map");
<br />                            map.put("key","value");
<br />                            %&gt;
<br />             useDirtyFlag = true意味着我们只能在调用setAttribute，removeAttribute后才能复制一个会话；
<br />                            false意味着在每个请求后复制会话。
<br />                            false意味着复制将以下列代码方式工作：
<br />                            &lt;%
<br />                            HashMap map = (HashMap)session.getAttribute("map");
<br />                            map.put("key","value");
<br />                            %&gt;
<br />                            
<br />             replicationMode = can be either 'pooled', 'synchronous' or 'asynchronous'.
<br />                               * Pooled means that the replication happens using several sockets in a synchronous way. Ie, the data gets replicated, then the request return. This is the same as the 'synchronous' setting except it uses a pool of sockets, hence it is multithreaded. This is the fastest and safest configuration. To use this, also increase the nr of tcp threads that you have dealing with replication.
<br />                               * Synchronous means that the thread that executes the request, is also the
<br />                               thread the replicates the data to the other nodes, and will not return until all
<br />                               nodes have received the information.
<br />                               * Asynchronous means that there is a specific 'sender' thread for each cluster node,
<br />                               so the request thread will queue the replication request into a "smart" queue,
<br />                               and then return to the client.
<br />                               The "smart" queue is a queue where when a session is added to the queue, and the same session
<br />                               already exists in the queue from a previous request, that session will be replaced
<br />                               in the queue instead of replicating two requests. This almost never happens, unless there is a 
<br />                               large network delay.
<br />             replicationMode = 可以是“pooled”、“synchronous”或者“asynchronous”
<br />                               * Pooled意味着在多个套接字上同步进行复制。例如，先复制数据，然后请求返回。
<br />                               这与“synchronous”相同，除了它使用一个套接字池，因此，它是多线程的。它是
<br />                               最快和最高级的设置，使用这个配置也增加了处理复制的tcp线程的域。
<br />                               * Synchronous指执行请求的线程，它也是向其他节点复制数据的线程，并且直到
<br />                               所有的节点都己经收到信息后才返回。
<br />                               * Asynchronous，对每个群集节点而言，这是一个特别的“sender”（发送者）线程，
<br />                               因此请求线程将复制请求排队到一个小队列中，然后，返回给用户。
<br />                               这个小队列是一个当会话被添加到队列中，而从先前的请求中，同一个会话己经存在
<br />                               ，这个会话将被放置在队列中以代替重复的两个请求。这几乎从不会发生，除非存在
<br />                               较大的网络延迟。
<br />        --&gt; 
<br />        &lt;!--
<br />            When configuring for clustering, you also add in a valve to catch all the requests
<br />            coming in, at the end of the request, the session may or may not be replicated.
<br />            A session is replicated if and only if all the conditions are met:
<br />            1. useDirtyFlag is true or setAttribute or removeAttribute has been called AND
<br />            2. a session exists (has been created)
<br />            3. the request is not trapped by the "filter" attribute
<br /><br />            The filter attribute is to filter out requests that could not modify the session,
<br />            hence we don't replicate the session after the end of this request.
<br />            The filter is negative, ie, anything you put in the filter, you mean to filter out,
<br />            ie, no replication will be done on requests that match one of the filters.
<br />            The filter attribute is delimited by ;, so you can't escape out ; even if you wanted to.
<br /><br />            filter=".*\.gif;.*\.js;" means that we will not replicate the session after requests with the URI
<br />            ending with .gif and .js are intercepted.
<br />        --&gt;
<br />        &lt;!-- 当配置群集时，你也添加一个值来捕获所有传入的请求，在请求结束时，这个会话可能被子复制，
<br />             也可能不被复制。一个会话是否复制取决于下列条件是否发生：
<br />             1. useDirtyFlag为真，或者setAttribute或者removeAttribute己经被调用。
<br />             2. 会话己经存在（己经被创建了）。
<br />             3. 请求没有被“filter”属性所捕获。
<br />             
<br />             这个filter（过滤器）属性用于过滤那些不能修改会话的请求，因此，我们在这个请求结束后不复制
<br />             会主。这个过滤器是消极的，例如，你向过滤器发送了一些东西，然后被过滤出去，在那个匹配的过
<br />             滤器上不会发生复制。
<br />             过滤器属性以分号为分隔，因此你不能换行，即使你想这么做。
<br />             
<br />             filter=".*\.gif;.*\.js;"意味着在进行以.gif和.js结束的URI请求后不复制会话。
<br />        
<br />        &lt;!--
<br />        &lt;Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
<br />                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"
<br />                 expireSessionsOnShutdown="false"
<br />                 useDirtyFlag="true"&gt;
<br /><br />            &lt;Membership 
<br />                className="org.apache.catalina.cluster.mcast.McastService"
<br />                mcastAddr="228.0.0.4"
<br />                mcastPort="45564"
<br />                mcastFrequency="500"
<br />                mcastDropTime="3000"/&gt;
<br /><br />            &lt;Receiver 
<br />                className="org.apache.catalina.cluster.tcp.ReplicationListener"
<br />                tcpListenAddress="auto"
<br />                tcpListenPort="4001"
<br />                tcpSelectorTimeout="100"
<br />                tcpThreadCount="6"/&gt;
<br /><br />            &lt;Sender
<br />                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
<br />                replicationMode="pooled"/&gt;
<br /><br />            &lt;Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
<br />                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/&gt;
<br />        &lt;/Cluster&gt;
<br />        --&gt; 
<br /><br /><br /><br />        &lt;!-- Normally, users must authenticate themselves to each web app
<br />             individually. Uncomment the following entry if you would like
<br />             a user to be authenticated the first time they encounter a
<br />             resource protected by a security constraint, and then have that
<br />             user identity maintained across *all* web applications contained
<br />             in this virtual host. --&gt;
<br />        &lt;!-- 通常，对每一个应用程序，用户必须逐个的认证他们自己。当他们遇到被
<br />             某种安全约束所保护的资源时，如果你想让用户只在第一次被认证，那么，
<br />             取消下面入口行的注释，然后在这个虚拟主机中包含这个用户的，横跨所有
<br />             web应用程序的用户身份识别。--&gt;
<br />             
<br />        &lt;!--
<br />        &lt;Valve className="org.apache.catalina.authenticator.SingleSignOn"
<br />                   debug="0"/&gt;
<br />        --&gt;
<br /><br />        &lt;!-- <a class="channel_keylink" href="http://www.661100.net/BCKF/ShowClass.asp?ClassID=13" target="_blank">Access</a> log processes all requests for this virtual host. By
<br />             default, log files are created in the "logs" directory relative to
<br />             $CATALINA_HOME. If you wish, you can specify a different
<br />             directory with the "directory" attribute. Specify either a relative
<br />             (to $CATALINA_HOME) or absolute path to the desired directory.
<br />        --&gt;
<br />        &lt;!-- 这个虚拟主机的所有请求的访问日志过程。默认情况下，日志文件被创建在相对
<br />             于$CATALINA_HOME目录下的logs目录下。通过directory属性，你也可以指定一个
<br />             不同的目录，如果你想的话。可以使用相对路径（相对于$CATALINA_HOME），也
<br />             可以使用绝对路径。--&gt;
<br />        &lt;!--
<br />        &lt;Valve className="org.apache.catalina.valves.<a class="channel_keylink" href="http://www.661100.net/BCKF/ShowClass.asp?ClassID=13" target="_blank">Access</a>LogValve"
<br />                 directory="logs" prefix="localhost_access_log." suffix=".txt"
<br />                 pattern="common" resolveHosts="false"/&gt;
<br />        --&gt;
<br /><br />        &lt;!-- Logger shared by all Contexts related to this virtual host. By
<br />             default (when using FileLogger), log files are created in the "logs"
<br />             directory relative to $CATALINA_HOME. If you wish, you can specify
<br />             a different directory with the "directory" attribute. Specify either a
<br />             relative (to $CATALINA_HOME) or absolute path to the desired
<br />             directory.--&gt;
<br />        &lt;!-- 与这个虚拟主机有关系所有上下文所共享的日志。默认情况下（使用FileLogger时），
<br />             日志文件被创建在相对于$CATALINA_HOME目录下的logs目录下。如果你希望，你也可
<br />             以给directory指定一个不同的路径。可以使用相对于$CATALINA_HOME的相对路径，也
<br />             可以使用绝对路径。
<br />        &lt;Logger className="org.apache.catalina.logger.FileLogger"
<br />                 directory="logs" prefix="localhost_log." suffix=".txt"
<br />            timestamp="true"/&gt;
<br /><br />      &lt;/Host&gt;
<br /><br />    &lt;/Engine&gt;
<br /><br />  &lt;/Service&gt;
<br /><br />&lt;/Server&gt;<img src ="http://www.blogjava.net/juhongtao/aggbug/75617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/juhongtao/" target="_blank">javaGrowing</a> 2006-10-17 14:47 <a href="http://www.blogjava.net/juhongtao/archive/2006/10/17/75617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat Class Loader HOW-TO</title><link>http://www.blogjava.net/juhongtao/archive/2006/10/17/75616.html</link><dc:creator>javaGrowing</dc:creator><author>javaGrowing</author><pubDate>Tue, 17 Oct 2006 06:43:00 GMT</pubDate><guid>http://www.blogjava.net/juhongtao/archive/2006/10/17/75616.html</guid><wfw:comment>http://www.blogjava.net/juhongtao/comments/75616.html</wfw:comment><comments>http://www.blogjava.net/juhongtao/archive/2006/10/17/75616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/juhongtao/comments/commentRss/75616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/juhongtao/services/trackbacks/75616.html</trackback:ping><description><![CDATA[
		<p>当Tomcat5启动以后，它创建一系列类加载器。这些类加载器以父子关系组织在一起，父类加载器在子类加载器的上面：</p>
		<div align="left">      Bootstrap<br />          |<br />       System<br />          |<br />       Common<br />      /      \<br />Catalina   Shared<br />                     /   \<br />        Webapp1  Webapp2 ... </div>
		<p>这些类加载器所扮演的角色，以及它们可以见到的类和资源的规则如下：<br /><br />如上图所示，Tomcat5 在初始化的时候创建如下类加载器：<br /><strong><br />Bootstrap</strong> - 这个类加载器可以加载Java虚拟机的运行时基础类，以及在系统扩展目录(<code>$JAVA_HOME/jre/lib/ext</code>)中的所有Jar包中的类。<strong>注意</strong>－一些JVM可能用多个类加载器来实现它，或者它是根本不能被看见的。<br /><strong><br />System</strong> - 这个类加载器一般可以加载<font face="Courier New">CLASSPATH环境变量的内容。所有这个类对于Tomcat内部的类和web应用程序的都是可见的。尽管如此，标准的Tomcat5启动脚本(<code>$CATALINA_HOME/bin/catalina.sh</code> 或 <code>%CATALINA_HOME%\bin\catalina.bat</code>)都会忽略CLASSPATH环境变量，取而代之的是从如下仓库加载：</font></p>
		<ul>
				<li>$CATALINA_HOME/bin/bootstrap.jar - 包含Tomcat5 服务器初始化的main()方法，以及所需的类加载器的实现类。 
</li>
				<li>$JAVA_HOME/lib/tools.jar - 包括把JSP页面编译成Serlet类所需的"javac"编译器. 
</li>
				<li>$CATALINA_HOME/bin/commons-logging-api.jar - Jakarta commons logging API. 
</li>
				<li>$CATALINA_HOME/bin/commons-daemon.jar - Jakarta commons daemon API. 
</li>
				<li>jmx.jar - The JMX 1.2 实现. </li>
		</ul>
		<p dir="ltr" style="margin-right: 0px;">
				<strong>Common</strong> - 这个类加载器可以使一些附加的类对于<font face="Courier New">Tomcat
内部的类和web应用程序可见。正常情况下，应用程序不应该替换它。所有$CATALINA_HOME/common/classes目录下的未打包类和
资源，以及$CATALINA_HOME/commons/endorsed、$CATALINA_HOME/commons/i18n、$
CATALINA_HOME/common/lib目录下的Jar包中的类和资源都是这个类加载器的加载对象。默认情况，包括如下内容：</font><em>         </em><em></em></p>
		<ul>
				<li>commons-el.jar - Jakarta commons el, Jasper用的EL表达式实现 
</li>
				<li>jasper-compiler.jar - The JSP 2.0 编译器. 
</li>
				<li>jasper-compiler-jdt.jar - The Eclipse JDT Java 编译器. 
</li>
				<li>jasper-runtime.jar - The JSP 2.0 运行库. 
</li>
				<li>jsp-api.jar - The JSP 2.0 API. 
</li>
				<li>naming-common.jar - Tomcat5的JNDI 实现，用于内存命名环境 
</li>
				<li>naming-factory.jar - Tomcat5的JNDI 实现，用于企业级资源引用(EJB, connection pools). 
</li>
				<li>naming-factory-dbcp.jar - Jakarta commons DBCP, 为Web应用程序提供JDBC连接池。这个类已经从默认的org.apache.commons包中移出。 
</li>
				<li>naming-java.jar -  java命名空间处理器. 
</li>
				<li>naming-resources.jar - The specialized JNDI naming
context implementation used to represent the static resources of a web
application. This is not related to the support of the J2EE ENC, and
cannot be removed. </li>
				<li>servlet-api.jar - The Servlet 2.4 API. 
</li>
				<li>tomcat-i18n-**.jar - Optional JARs containing resource
bundles for other languages. As default bundles are also included in
each individual JAR, they can be safely removed if no
internationalization of messages is needed. </li>
		</ul>
		<p>
				<strong>Catalina</strong> - 这个类加载器主要加载Tomcat5自己所需要的类和资源。这些类和资源对于Web应用程序是完全不可见的。在<font face="Courier New">$CATALINA_HOME/server/classes目录下的所有类和资源，$CATALINA_HOME/server/lib下的所有Jar包中类和资源是这个类加载器的加载对象。默认情况，包括个如下内容：</font></p>
		<ul>
				<li>catalina.jar - Tomcat5中Catalina Servlet容器的实现部分。 
</li>
				<li>catalina-ant.jar - 在管理web应用程序时要用倒的一些Ant任务。 
</li>
				<li>catalina-optional.jar - 一些Catalina可选组件。 
</li>
				<li>commons-modeler.jar - Tomcat通过JMX暴露其内部对象是用的一些MBean实现。 
</li>
				<li>servlets-xxxxx.jar - 这些类同内部的Servlet一起提供Tomcat的部分功能，它们都是独立的，所以如果不需要相应的服务可以将其删除。或者它们可以从属于特定的安全管理器。 
</li>
				<li>tomcat-coyote.jar - Coyote API.。 
</li>
				<li>tomcat-http.jar - 标准的Java HTTP/1.1 连接器.。 
</li>
				<li>tomcat-ajp.jar - <code>AJP</code> web 服务器的连接器，一般用于Apache，iPlanet iAS和 iWS.。 
</li>
				<li>tomcat-util.jar - Tomcat连接器需要的工具类。 </li>
		</ul>
		<p>
				<strong>Shared</strong> - 这个类加载器用于把一些类和资源共享给<strong>所有</strong>的web应用程序。(除非Tomcat内部的类也需要访问这些类，在这种情况下你应该把它们放在<strong>Common</strong>类加载能加载的地方). 在<font face="Courier New">$CATALINA_BASE/shared/classes
目录下的所有未打包类和资源，以及$CATALINA_BASE/shared/lib目录下的所有Jar包中的类和资源可以被其加载。如果通过$
CATALINA_BASE环境变量来从同一个tomcat程序运行了多个在实例，那么这个类加载器的仓库是相对于$CATALINA_BASE而不是$
CATALINA_HOME。</font> </p>
		<p>
				<strong>WebappX</strong> - 系统会为部署在一个Tomcat实例中的每个应用程序创建一个这样的类加载器，它们为所属的应用程序加载类。所有你的web应用程序包的<font face="Courier New">/WEB-INF/classes目录下的类和资源，以及</font><br /><font face="Courier New">/WEB-INF/lib</font> 目录下的所有Jar包中的类和资源是这个类的加载对象。这些类和资源仅对这个应用程序可见，并且这个应用程序也看不见其他应用程序的类和资源。<br /><br />就像上面所描述的，web应用程序的类加载的加载流程与默认的Java 2的类记载托管模型是<strong>不一样</strong>的。当有一个请求需要应用程序的<em>WebappX</em> 类加载器加载一个类的时候，这个类加载器是<strong>首先</strong>到
自己的仓库中查找，而不是先交给上面的类加载器查找。这里有一些例外。JRE的基础类是不能被覆盖的。对于其他一些类（如J2SE
1.4+中的XML解析器组件），可以使用J2SE1.4的签名特性。最后任何包括servlet
API类的Jar包会被忽略。Tomcat5中的其他的类加载器使用正常托管模式。</p>
		<p dir="ltr" style="margin-right: 0px;">这样在一个web应用程序中，类和资源的加载顺序是这样：</p>
		<p dir="ltr" style="margin-right: 0px;">
		</p>
		<ul>
				<li>Bootstrap classes of your JVM 
</li>
				<li>System class loader classses (described above) 
</li>
				<li>
						<em>/WEB-INF/classes</em> of your web application 
</li>
				<li>
						<em>/WEB-INF/lib/*.jar</em> of your web application 
</li>
				<li>
						<em>$CATALINA_HOME/common/classes</em>
				</li>
				<li>
						<em>$CATALINA_HOME/common/endorsed/*.jar</em>
				</li>
				<li>
						<em>$CATALINA_HOME/common/i18n/*.jar</em>
				</li>
				<li>
						<em>$CATALINA_HOME/common/lib/*.jar</em>
				</li>
				<li>
						<em>$CATALINA_BASE/shared/classes</em>
				</li>
				<li>
						<em>$CATALINA_BASE/shared/lib/*.jar</em>
				</li>
		</ul>
<img src ="http://www.blogjava.net/juhongtao/aggbug/75616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/juhongtao/" target="_blank">javaGrowing</a> 2006-10-17 14:43 <a href="http://www.blogjava.net/juhongtao/archive/2006/10/17/75616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat配置技巧Top 10</title><link>http://www.blogjava.net/juhongtao/archive/2006/05/15/46168.html</link><dc:creator>javaGrowing</dc:creator><author>javaGrowing</author><pubDate>Mon, 15 May 2006 02:00:00 GMT</pubDate><guid>http://www.blogjava.net/juhongtao/archive/2006/05/15/46168.html</guid><wfw:comment>http://www.blogjava.net/juhongtao/comments/46168.html</wfw:comment><comments>http://www.blogjava.net/juhongtao/archive/2006/05/15/46168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/juhongtao/comments/commentRss/46168.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/juhongtao/services/trackbacks/46168.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="96%" align="center" border="0">
				<tbody>
						<tr>
								<td class="big" valign="top" width="540">
										<p>编者按：现在开发Java Web应用，建立和部署Web内容是一件很简单的工作。使用Jakarta Tomcat作为Servlet和JSP容器的人已经遍及全世界。Tomcat具有免费、跨平台等诸多特性，并且更新得很快，现在非常的流行。<br /><br /><br /><br />你所需要做的就是：按照你的需求配置Tomcat，只要你正确配置，Tomcat一般都能适合你的要求。下面是一系列关于Tomcat的配置技巧，这些技巧源自于我的书：《Tomcat权威指南》，希望对你有所帮助。—— Jason Brittain<br /><br /><br /><br />1． 配置系统管理（Admin Web Application）<br /><br />大多数商业化的J2EE服务器都提供一个功能强大的管理界面，且大都采用易于理解的Web应用界面。Tomcat按照自己的方式，同样提供一个成熟的管理工具，并且丝毫不逊于那些商业化的竞争对手。Tomcat的Admin Web Application最初在4.1版本时出现，当时的功能包括管理context、data source、user和group等。当然也可以管理像初始化参数，user、group、role的多种数据库管理等。在后续的版本中，这些功能将得到很大的扩展，但现有的功能已经非常实用了。<br /><br /><br /><br />Admin Web Application被定义在自动部署文件：CATALINA_BASE/webapps/admin.xml 。<br /><br />（译者注：CATALINA_BASE即tomcat安装目录下的server目录）<br /><br /><br /><br />你必须编辑这个文件，以确定Context中的docBase参数是绝对路径。也就是说，CATALINA_BASE/webapps/admin.xml 的路径是绝对路径。作为另外一种选择，你也可以删除这个自动部署文件，而在server.xml文件中建立一个Admin Web Application的context，效果是一样的。你不能管理Admin Web Application这个应用，换而言之，除了删除CATALINA_BASE/webapps/admin.xml ，你可能什么都做不了。<br /><br /><br /><br />如果你使用UserDatabaseRealm（默认），你将需要添加一个user以及一个role到CATALINA_BASE/conf/tomcat-users.xml 文件中。你编辑这个文件，添加一个名叫“admin”的role 到该文件中，如下：<br /><br /><br /><br />&lt;role name="admin"/&gt;<br /><br /><br /><br />你同样需要有一个用户，并且这个用户的角色是“admin”。象存在的用户那样，添加一个用户（改变密码使其更加安全）：<br /><br /><br /><br />&lt;user name="admin" password="deep_dark_secret" roles="admin"/&gt;<br /><br /><br /><br />当你完成这些步骤后，请重新启动Tomcat，访问http://localhost:8080/admin，你将看到一个登录界面。Admin Web Application采用基于容器管理的安全机制，并采用了Jakarta Struts框架。一旦你作为“admin”角色的用户登录管理界面，你将能够使用这个管理界面配置Tomcat。<br /><br /><br /><br />2．配置应用管理（Manager Web Application）<br /><br />Manager Web Application让你通过一个比Admin Web Application更为简单的用户界面，执行一些简单的Web应用任务。<br /><br /><br /><br />Manager Web Application被被定义在一个自动部署文件中：<br /><br /><br /><br />CATALINA_BASE/webapps/manager.xml 。<br /><br /><br /><br />你必须编辑这个文件，以确保context的docBase参数是绝对路径，也就是说CATALINA_HOME/server/webapps/manager的绝对路径。<br /><br />（译者注：CATALINA_HOME即tomcat安装目录）<br /><br /><br /><br />如果你使用的是UserDatabaseRealm，那么你需要添加一个角色和一个用户到CATALINA_BASE/conf/tomcat-users.xml文件中。接下来，编辑这个文件，添加一个名为“manager”的角色到该文件中：<br /><br /><br /><br />&lt;role name=”manager”&gt;<br /><br /><br /><br />你同样需要有一个角色为“manager”的用户。像已经存在的用户那样，添加一个新用户（改变密码使其更加安全）：<br /><br /><br /><br />&lt;user name="manager" password="deep_dark_secret" roles="manager"/&gt;<br /><br /><br /><br />然后重新启动Tomcat，访问http://localhost/manager/list，将看到一个很朴素的文本型管理界面，或者访问http://localhost/manager/html/list，将看到一个HMTL的管理界面。不管是哪种方式都说明你的Manager Web Application现在已经启动了。<br /><br /><br /><br />Manager application让你可以在没有系统管理特权的基础上，安装新的Web应用，以用于测试。如果我们有一个新的web应用位于/home/user/hello下在，并且想把它安装到 /hello下，为了测试这个应用，我们可以这么做，在第一个文件框中输入“/hello”（作为访问时的path），在第二个文本框中输入“file:/home/user/hello”（作为Config URL）。<br /><br /><br /><br />Manager application还允许你停止、重新启动、移除以及重新部署一个web应用。停止一个应用使其无法被访问，当有用户尝试访问这个被停止的应用时，将看到一个503的错误——“503 - This application is not currently available”。<br /><br /><br /><br />移除一个web应用，只是指从Tomcat的运行拷贝中删除了该应用，如果你重新启动Tomcat，被删除的应用将再次出现（也就是说，移除并不是指从硬盘上删除）。<br /><br /><br /><br />3．部署一个web应用<br /><br />有两个办法可以在系统中部署web服务。<br /><br />1&gt; 拷贝你的WAR文件或者你的web应用文件夹（包括该web的所有内容）到$CATALINA_BASE/webapps目录下。<br /><br />2&gt; 为你的web服务建立一个只包括context内容的XML片断文件，并把该文件放到$CATALINA_BASE/webapps目录下。这个web应用本身可以存储在硬盘上的任何地方。<br /><br /><br /><br />如果你有一个WAR文件，你若想部署它，则只需要把该文件简单的拷贝到CATALINA_BASE/webapps目录下即可，文件必须以“.war”作为扩展名。一旦Tomcat监听到这个文件，它将（缺省的）解开该文件包作为一个子目录，并以WAR文件的文件名作为子目录的名字。接下来，Tomcat将在内存中建立一个context，就好象你在server.xml文件里建立一样。当然，其他必需的内容，将从server.xml中的DefaultContext获得。<br /><br /><br /><br />部署web应用的另一种方式是写一个Context XML片断文件，然后把该文件拷贝到CATALINA_BASE/webapps目录下。一个Context片断并非一个完整的XML文件，而只是一个context元素，以及对该应用的相应描述。这种片断文件就像是从server.xml中切取出来的context元素一样，所以这种片断被命名为“context片断”。<br /><br /><br /><br />举个例子，如果我们想部署一个名叫MyWebApp.war的应用，该应用使用realm作为访问控制方式，我们可以使用下面这个片断：<br /><br /><br /><br />&lt;!-- <br /><br />Context fragment for deploying MyWebApp.war <br /><br />--&gt;<br /><br />&lt;Context path="/demo" docBase="webapps/MyWebApp.war" <br /><br />debug="0" privileged="true"&gt;<br /><br />&lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm" <br /><br />resourceName="UserDatabase"/&gt; <br /><br />&lt;/Context&gt;<br /><br /><br /><br />把该片断命名为“MyWebApp.xml”，然后拷贝到CATALINA_BASE/webapps目录下。<br /><br /><br /><br />这种context片断提供了一种便利的方法来部署web应用，你不需要编辑server.xml，除非你想改变缺省的部署特性，安装一个新的web应用时不需要重启动Tomcat。<br /><br /><br /><br /><br /><br />4．配置虚拟主机（Virtual Hosts）<br /><br />关于server.xml中“Host”这个元素，只有在你设置虚拟主机的才需要修改。虚拟主机是一种在一个web服务器上服务多个域名的机制，对每个域名而言，都好象独享了整个主机。实际上，大多数的小型商务网站都是采用虚拟主机实现的，这主要是因为虚拟主机能直接连接到Internet并提供相应的带宽，以保障合理的访问响应速度，另外虚拟主机还能提供一个稳定的固定IP。<br /><br /><br /><br />基于名字的虚拟主机可以被建立在任何web服务器上，建立的方法就是通过在域名服务器（DNS）上建立IP地址的别名，并且告诉web服务器把去往不同域名的请求分发到相应的网页目录。因为这篇文章主要是讲Tomcat，我们不准备介绍在各种操作系统上设置DNS的方法，如果你在这方面需要帮助，请参考《DNS and Bind》一书，作者是Paul Albitz and Cricket Liu (OReilly)。为了示范方便，我将使用一个静态的主机文件，因为这是测试别名最简单的方法。<br /><br />在Tomcat中使用虚拟主机，你需要设置DNS或主机数据。为了测试，为本地IP设置一个IP别名就足够了，接下来，你需要在server.xml中添加几行内容，如下：<br /><br /><br /><br />&lt;Server port="8005" shutdown="SHUTDOWN" debug="0"&gt;<br /><br />&lt;Service name="Tomcat-Standalone"&gt;<br /><br />&lt;Connector className="org.apache.coyote.tomcat4.CoyoteConnector"<br /><br />port="8080" minProcessors="5" maxProcessors="75"<br /><br />enableLookups="true" redirectPort="8443"/&gt;<br /><br />&lt;Connector className="org.apache.coyote.tomcat4.CoyoteConnector"<br /><br />port="8443" minProcessors="5" maxProcessors="75"<br /><br />acceptCount="10" debug="0" scheme="https" secure="true"/&gt;<br /><br />&lt;Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory"<br /><br />clientAuth="false" protocol="TLS" /&gt;<br /><br />&lt;/Connector&gt;<br /><br />&lt;Engine name="Standalone" defaultHost="localhost" debug="0"&gt;<br /><br />&lt;!-- This Host is the default Host --&gt;<br /><br />&lt;Host name="localhost" debug="0" appBase="webapps"<br /><br />unpackWARs="true" autoDeploy="true"&gt;<br /><br />&lt;Context path="" docBase="ROOT" debug="0"/&gt;<br /><br />&lt;Context path="/orders" docBase="/home/ian/orders" debug="0"<br /><br />reloadable="true" crossContext="true"&gt;<br /><br />&lt;/Context&gt;<br /><br />&lt;/Host&gt;<br /><br /><br /><br />&lt;!-- This Host is the first "Virtual Host": www.example.com --&gt;<br /><br />&lt;Host name="www.example.com" appBase="/home/example/webapp"&gt;<br /><br />&lt;Context path="" docBase="."/&gt;<br /><br />&lt;/Host&gt;<br /><br /><br /><br />&lt;/Engine&gt;<br /><br />&lt;/Service&gt;<br /><br />&lt;/Server&gt;<br /><br /><br /><br />Tomcat的server.xml文件，在初始状态下，只包括一个虚拟主机，但是它容易被扩充到支持多个虚拟主机。在前面的例子中展示的是一个简单的server.xml版本，其中粗体部分就是用于添加一个虚拟主机。每一个Host元素必须包括一个或多个context元素，所包含的context元素中必须有一个是默认的context，这个默认的context的显示路径应该为空（例如，path=””）。<br /><br /><br /><br />5．配置基础验证（Basic Authentication）<br /><br />容器管理验证方法控制着当用户访问受保护的web应用资源时，如何进行用户的身份鉴别。当一个web应用使用了Basic Authentication（BASIC参数在web.xml文件中auto-method元素中设置），而有用户访问受保护的web应用时，Tomcat将通过HTTP Basic Authentication方式，弹出一个对话框，要求用户输入用户名和密码。在这种验证方法中，所有密码将被以64位的编码方式在网络上传输。<br /><br /><br /><br />注意：使用Basic Authentication通过被认为是不安全的，因为它没有强健的加密方法，除非在客户端和服务器端都使用HTTPS或者其他密码加密码方式（比如，在一个虚拟私人网络中）。若没有额外的加密方法，网络管理员将能够截获（或滥用）用户的密码。但是，如果你是刚开始使用Tomcat，或者你想在你的web应用中测试一下基于容器的安全管理，Basic Authentication还是非常易于设置和使用的。只需要添加&lt;security-constraint&gt;和&lt;login-config&gt;两个元素到你的web应用的web.xml文件中，并且在CATALINA_BASE/conf/tomcat-users.xml 文件中添加适当的&lt;role&gt;和&lt;user&gt;即可，然后重新启动Tomcat。<br /><br /><br /><br />下面例子中的web.xml摘自一个俱乐部会员网站系统，该系统中只有member目录被保护起来，并使用Basic Authentication进行身份验证。请注意，这种方式将有效的代替Apache web服务器中的.htaccess文件。<br /><br /><br /><br />&lt;!--<br /><br />Define the Members-only area, by defining<br /><br />a "Security Constraint" on this Application, and<br /><br />mapping it to the subdirectory (URL) that we want<br /><br />to restrict.<br /><br />--&gt;<br /><br />&lt;security-constraint&gt;<br /><br />&lt;web-resource-collection&gt;<br /><br />&lt;web-resource-name&gt;<br /><br />Entire Application<br /><br />&lt;/web-resource-name&gt;<br /><br />&lt;url-pattern&gt;/members/*&lt;/url-pattern&gt;<br /><br />&lt;/web-resource-collection&gt;<br /><br />&lt;auth-constraint&gt;<br /><br />&lt;role-name&gt;member&lt;/role-name&gt;<br /><br />&lt;/auth-constraint&gt;<br /><br />&lt;/security-constraint&gt;<br /><br />&lt;!-- Define the Login Configuration for this Application --&gt;<br /><br />&lt;login-config&gt;<br /><br />&lt;auth-method&gt;BASIC&lt;/auth-method&gt;<br /><br />&lt;realm-name&gt;My Club Members-only Area&lt;/realm-name&gt;<br /><br />&lt;/login-config&gt;<br /><br /><br /><br />6．配置单点登录（Single Sign-On）<br /><br />一旦你设置了realm和验证的方法，你就需要进行实际的用户登录处理。一般说来，对用户而言登录系统是一件很麻烦的事情，你必须尽量减少用户登录验证的次数。作为缺省的情况，当用户第一次请求受保护的资源时，每一个web应用都会要求用户登录。如果你运行了多个web应用，并且每个应用都需要进行单独的用户验证，那这看起来就有点像你在与你的用户搏斗。用户们不知道怎样才能把多个分离的应用整合成一个单独的系统，所有他们也就不知道他们需要访问多少个不同的应用，只是很迷惑，为什么总要不停的登录。<br /><br /><br /><br />Tomcat 4的“single sign-on”特性允许用户在访问同一虚拟主机下所有web应用时，只需登录一次。为了使用这个功能，你只需要在Host上添加一个SingleSignOn Valve元素即可，如下所示：<br /><br /><br /><br />&lt;Valve className="org.apache.catalina.authenticator.SingleSignOn"<br /><br />debug="0"/&gt;<br /><br /><br /><br />在Tomcat初始安装后，server.xml的注释里面包括SingleSignOn Valve配置的例子，你只需要去掉注释，即可使用。那么，任何用户只要登录过一个应用，则对于同一虚拟主机下的所有应用同样有效。<br /><br /><br /><br />使用single sign-on valve有一些重要的限制：<br /><br />1&gt; value必须被配置和嵌套在相同的Host元素里，并且所有需要进行单点验证的web应用（必须通过context元素定义）都位于该Host下。<br /><br />2&gt; 包括共享用户信息的realm必须被设置在同一级Host中或者嵌套之外。<br /><br />3&gt; 不能被context中的realm覆盖。<br /><br />4&gt; 使用单点登录的web应用最好使用一个Tomcat的内置的验证方式（被定义在web.xml中的&lt;auth-method&gt;中），这比自定义的验证方式强，Tomcat内置的的验证方式包括basic、digest、form和client-cert。<br /><br />5&gt; 如果你使用单点登录，还希望集成一个第三方的web应用到你的网站中来，并且这个新的web应用使用它自己的验证方式，而不使用容器管理安全，那你基本上就没招了。你的用户每次登录原来所有应用时需要登录一次，并且在请求新的第三方应用时还得再登录一次。当然，如果你拥有这个第三方web应用的源码，而你又是一个程序员，你可以修改它，但那恐怕也不容易做。<br /><br />6&gt; 单点登录需要使用cookies。<br /><br /><br /><br />7．配置用户定制目录（Customized User Directores）<br /><br />一些站点允许个别用户在服务器上发布网页。例如，一所大学的学院可能想给每一位学生一个公共区域，或者是一个ISP希望给一些web空间给他的客户，但这又不是虚拟主机。在这种情况下，一个典型的方法就是在用户名前面加一个特殊字符（~），作为每位用户的网站，比如：<br /><br /><br /><br />http://www.cs.myuniversity.edu/~username<br /><br />http://members.mybigisp.com/~username<br /><br /><br /><br />Tomcat提供两种方法在主机上映射这些个人网站，主要使用一对特殊的Listener元素。Listener的className属性应该是org.apache.catalina.startup.UserConfig，userClass属性应该是几个映射类之一。如果你的系统是Unix，它将有一个标准的/etc/passwd文件，该文件中的帐号能够被运行中的Tomcat很容易的读取，该文件指定了用户的主目录，使用PasswdUserDatabase 映射类。<br /><br /><br /><br />&lt;Listener className="org.apache.catalina.startup.UserConfig" <br /><br />directoryName="public_html" <br /><br />userClass="org.apache.catalina.startup.PasswdUserDatabase"/&gt;<br /><br /><br /><br />web文件需要放置在像/home/users/ian/public_html 或者 /users/jbrittain/public_html一样的目录下面。当然你也可以改变public_html 到其他任何子目录下。<br /><br /><br /><br />实际上，这个用户目录根本不一定需要位于用户主目录下里面。如果你没有一个密码文件，但你又想把一个用户名映射到公共的像/home一样目录的子目录里面，则可以使用HomesUserDatabase类。<br /><br /><br /><br />&lt;Listener className="org.apache.catalina.startup.UserConfig" <br /><br />directoryName="public_html" homeBase="/home" <br /><br />userClass="org.apache.catalina.startup.HomesUserDatabase"/&gt;<br /><br /><br /><br />这样一来，web文件就可以位于像/home/ian/public_html 或者 /home/jasonb/public_html一样的目录下。这种形式对Windows而言更加有利，你可以使用一个像c:home这样的目录。<br /><br /><br /><br />这些Listener元素，如果出现，则必须在Host元素里面，而不能在context元素里面，因为它们都用应用于Host本身。<br /><br /><br /><br /><br /><br />8．在Tomcat中使用CGI脚本<br /><br />Tomcat主要是作为Servlet/JSP容器，但它也有许多传统web服务器的性能。支持通用网关接口（Common Gateway Interface，即CGI）就是其中之一，CGI提供一组方法在响应浏览器请求时运行一些扩展程序。CGI之所以被称为通用，是因为它能在大多数程序或脚本中被调用，包括：Perl，Python，awk，Unix shell scripting等，甚至包括Java。当然，你大概不会把一个Java应用程序当作CGI来运行，毕竟这样太过原始。一般而言，开发Servlet总要比CGI具有更好的效率，因为当用户点击一个链接或一个按钮时，你不需要从操作系统层开始进行处理。<br /><br /><br /><br />Tomcat包括一个可选的CGI Servlet，允许你运行遗留下来的CGI脚本。<br /><br /><br /><br />为了使Tomcat能够运行CGI，你必须做如下几件事：<br /><br />1. 把servlets-cgi.renametojar （在CATALINA_HOME/server/lib/目录下）改名为servlets-cgi.jar。处理CGI的servlet应该位于Tomcat的CLASSPATH下。<br /><br />2. 在Tomcat的CATALINA_BASE/conf/web.xml 文件中，把关于&lt;servlet-name&gt; CGI的那段的注释去掉（默认情况下，该段位于第241行）。<br /><br />3. 同样，在Tomcat的CATALINA_BASE/conf/web.xml文件中，把关于对CGI进行映射的那段的注释去掉（默认情况下，该段位于第299行）。注意，这段内容指定了HTML链接到CGI脚本的访问方式。<br /><br />4. 你可以把CGI脚本放置在WEB-INF/cgi 目录下（注意，WEB-INF是一个安全的地方，你可以把一些不想被用户看见或基于安全考虑不想暴露的文件放在此处），或者你也可以把CGI脚本放置在context下的其他目录下，并为CGI Servlet调整cgiPathPrefix初始化参数。这就指定的CGI Servlet的实际位置，且不能与上一步指定的URL重名。<br /><br />5. 重新启动Tomcat，你的CGI就可以运行了。<br /><br /><br /><br />在Tomcat中，CGI程序缺省放置在WEB-INF/cgi目录下，正如前面所提示的那样，WEB-INF目录受保护的，通过客户端的浏览器无法窥探到其中内容，所以对于放置含有密码或其他敏感信息的CGI脚本而言，这是一个非常好的地方。为了兼容其他服务器，尽管你也可以把CGI脚本保存在传统的/cgi-bin目录，但要知道，在这些目录中的文件有可能被网上好奇的冲浪者看到。另外，在Unix中，请确定运行Tomcat的用户有执行CGI脚本的权限。<br /><br /><br /><br />9．改变Tomcat中的JSP编译器（JSP Compiler）<br /><br />在Tomcat 4.1（或更高版本，大概），JSP的编译由包含在Tomcat里面的Ant程序控制器直接执行。这听起来有一点点奇怪，但这正是Ant有意为之的一部分，有一个API文档指导开发者在没有启动一个新的JVM的情况下，使用Ant。这是使用Ant进行Java开发的一大优势。另外，这也意味着你现在能够在Ant中使用任何javac支持的编译方式，这里有一个关于Apache Ant使用手册的javac page列表。使用起来是容易的，因为你只需要在&lt;init-param&gt; 元素中定义一个名字叫“compiler”，并且在value中有一个支持编译的编译器名字，示例如下：<br /><br /><br /><br />&lt;servlet&gt;<br /><br />&lt;servlet-name&gt;jsp&lt;/servlet-name&gt;<br /><br />&lt;servlet-class&gt;<br /><br />org.apache.jasper.servlet.JspServlet<br /><br />&lt;/servlet-class&gt;<br /><br />&lt;init-param&gt;<br /><br />&lt;param-name&gt;logVerbosityLevel&lt;/param-name&gt;<br /><br />&lt;param-value&gt;WARNING&lt;/param-value&gt;<br /><br />&lt;/init-param&gt;<br /><br />&lt;init-param&gt;<br /><br />&lt;param-name&gt;compiler&lt;/param-name&gt;<br /><br />&lt;param-value&gt;jikes&lt;/param-value&gt;<br /><br />&lt;/init-param&gt;<br /><br />&lt;load-on-startup&gt;3&lt;/load-on-startup&gt;<br /><br />&lt;/servlet&gt;<br /><br /><br /><br />当然，给出的编译器必须已经安装在你的系统中，并且CLASSPATH可能需要设置，那处决于你选择的是何种编译器。<br /><br /><br /><br />10．限制特定主机访问（Restricting Access to Specific Hosts）<br /><br />有时，你可能想限制对Tomcat web应用的访问，比如，你希望只有你指定的主机或IP地址可以访问你的应用。这样一来，就只有那些指定的的客户端可以访问服务的内容了。为了实现这种效果，Tomcat提供了两个参数供你配置：RemoteHostValve 和RemoteAddrValve。<br /><br /><br /><br />通过配置这两个参数，可以让你过滤来自请求的主机或IP地址，并允许或拒绝哪些主机/IP。与之类似的，在Apache的httpd文件里有对每个目录的允许/拒绝指定。<br /><br />例如你可以把Admin Web application设置成只允许本地访问，设置如下：<br /><br /><br /><br />&lt;Context path="/path/to/secret_files" ...&gt;<br /><br />&lt;Valve className="org.apache.catalina.valves.RemoteAddrValve"<br /><br />allow="127.0.0.1" deny=""/&gt;<br /><br />&lt;/Context&gt;<br /><br /><br /><br />如果没有给出允许主机的指定，那么与拒绝主机匹配的主机就会被拒绝，除此之外的都是允许的。与之类似，如果没有给出拒绝主机的指定，那么与允许主机匹配的主机就会被允许，除此之外的都是拒绝的。<br /><br /><br /><br />--------------------------------------<br /><br /><br /><br />作者简介：<br /><br />Jason Brittain是CollabNet公司的一名资深软件工程师，主要负责软件底层架构的开发。他已经为Apache Jakarta项目做了很多贡献，多年以来，他一直是一名积极的开源软件开发者。<br /><br /><br /><br />Ian F. Darwin已经在计算机行业工作了30年：从1980年开始使用Unix，从1995年开始使用Java，从1998年开始使用OpenBSD。他是两本Oreilly图书的作者：Checking C Programs with lint 和 Java Cookbook，还与Jason Brittain合著了Tomcat: The Definitive Guide。<br /><br /><br /><br />译者简介：<br /><br />陈光（Holen Chen），J2EE项目经理，熟悉知识管理及电子政务，致力于Apache Jakarta项目在国广的推广及深层次应用，可通过 holen@263.net与作者联系。<br /></p>
										<div>
										</div>
										<p>
										</p>
								</td>
								<td valign="top">
										<script type="text/javascript">
												<!--
google_ad_client = "pub-2481528254889470";
google_alternate_ad_url = "http://";
google_ad_width = 160;
google_ad_height = 600;
google_ad_format = "160x600_as";
google_ad_type = "text_image";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//-->
										</script>
										<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
										</script>
										<iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-2481528254889470&amp;dt=1147658277149&amp;lmt=1147658277&amp;alternate_ad_url=http%3A%2F%2F&amp;format=160x600_as&amp;output=html&amp;url=http%3A%2F%2Fwww.dingl.com%2Fview.shtml%3Fxh%3D405&amp;color_bg=FFFFFF&amp;color_text=000000&amp;color_link=0000FF&amp;color_url=008000&amp;color_border=336699&amp;ad_type=text_image&amp;ref=http%3A%2F%2Fwww.dingl.com%2Fview.shtml%3Fxh%3D485&amp;cc=435&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=1&amp;u_java=true" frameborder="0" width="160" scrolling="no" height="600" allowtransparency="">
										</iframe>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/juhongtao/aggbug/46168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/juhongtao/" target="_blank">javaGrowing</a> 2006-05-15 10:00 <a href="http://www.blogjava.net/juhongtao/archive/2006/05/15/46168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat参数说明  </title><link>http://www.blogjava.net/juhongtao/archive/2006/05/13/45965.html</link><dc:creator>javaGrowing</dc:creator><author>javaGrowing</author><pubDate>Sat, 13 May 2006 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/juhongtao/archive/2006/05/13/45965.html</guid><wfw:comment>http://www.blogjava.net/juhongtao/comments/45965.html</wfw:comment><comments>http://www.blogjava.net/juhongtao/archive/2006/05/13/45965.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/juhongtao/comments/commentRss/45965.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/juhongtao/services/trackbacks/45965.html</trackback:ping><description><![CDATA[server.xml配置简介 <br />下面我们将讲述这个文件中的基本配置信息，更具体的配置信息见tomcat的文档 <br />server: port    指定一个端口，这个端口负责监听关闭tomcat的请求<br />shutdown    指定向端口发送的命令字符串<br />service: name    指定service的名字<br />Connector    (表示客户端和service之间的连接):<br />port    指定服务器端要创建的端口号，并在这个断口监听来自客户端的请求<br />minProcessors    服务器启动时创建的处理请求的线程数<br />maxProcessors    最大可以创建的处理请求的线程数<br />enableLookups    如果为true，则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名，若为false则不进行DNS查询，而是返回其ip地址<br />redirectPort    指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号<br />acceptCount    指定当所有可以使用的处理请求的线程数都被使用时，可以放到处理队列中的请求数，超过这个数的请求将不予处理<br />connectionTimeout    指定超时的时间数(以毫秒为单位)<br />Engine    (表示指定service中的请求处理机，接收和处理来自Connector的请求):<br />defaultHost    指定缺省的处理请求的主机名，它至少与其中的一个host元素的name属性值是一样的<br />Context    (表示一个web应用程序，通常为WAR文件，关于WAR的具体信息见servlet规范):<br />docBase    应用程序的路径或者是WAR文件存放的路径<br />path    表示此web应用程序的url的前缀，这样请求的url为<a href="http://localhost:8080/path/****" target="_blank">http://localhost:8080/path/****</a><br />reloadable    这个属性非常重要，如果为true，则tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes目录的变化，自动装载新的应用程序，我们可以在不重起tomcat的情况下改变应用程序<br />host    (表示一个虚拟主机):<br />name    指定主机名<br />appBase    应用程序基本目录，即存放应用程序的目录<br />unpackWARs    如果为true，则tomcat会自动将WAR文件解压，否则不解压，直接从WAR文件中运行应用程序<br />Logger    (表示日志，调试和错误信息):<br />className    指定logger使用的类名，此类必须实现<br />org.apache.catalina.Logger    接口<br />prefix    指定log文件的前缀<br />suffix    指定log文件的后缀<br />timestamp    如果为true，则log文件名中要加入时间，如下例:localhost_log.2001-10-04.txt<br />Realm    (表示存放用户名，密码及role的数据库):<br />className    指定Realm使用的类名，此类必须实现org.apache.catalina.Realm接口<br />Valve    (功能与Logger差不多，其prefix和suffix属性解释和Logger中的一样):<br />className    指定Valve使用的类名，如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息<br />directory    指定log文件存放的位置<br />pattern    有两个值，common方式记录远程主机名或ip地址，用户名，日期，第一行请求的字符串，HTTP响应代码，发送的字节数。combined方式比common方式记录的值更多<br />注意： <br />1：经过我测试，我设置Context 的path="",reloadable=true，然后放一个WAR文件到webapps目录，结果tomcat不能检测出此文件(重起tomcat可以)，而把此文件解压，则tomcat会自动检测出这个新的应用程序。如果不能自动检测WAR文件，我们可以利用下面管理中讲的方法来部署应用程序。 <br />2：默认的server.xml中，Realm元素只设置了一个className属性，但此文件中也包含几个通过JDBC连接到数据库进行验证的示例(被注释掉了)，通过Realm元素我们可以实现容器安全管理(Container Managed Security)。 <br />3：还有一些元素我们没有介绍，如Parameter，loader，你可以通过tomcat的文档获取这些元素的信息。 <br /><br /><img src ="http://www.blogjava.net/juhongtao/aggbug/45965.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/juhongtao/" target="_blank">javaGrowing</a> 2006-05-13 12:52 <a href="http://www.blogjava.net/juhongtao/archive/2006/05/13/45965.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat中的几点配置说明</title><link>http://www.blogjava.net/juhongtao/archive/2006/05/13/45964.html</link><dc:creator>javaGrowing</dc:creator><author>javaGrowing</author><pubDate>Sat, 13 May 2006 04:49:00 GMT</pubDate><guid>http://www.blogjava.net/juhongtao/archive/2006/05/13/45964.html</guid><wfw:comment>http://www.blogjava.net/juhongtao/comments/45964.html</wfw:comment><comments>http://www.blogjava.net/juhongtao/archive/2006/05/13/45964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/juhongtao/comments/commentRss/45964.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/juhongtao/services/trackbacks/45964.html</trackback:ping><description><![CDATA[1. 如何加大tomcat连接数
<p>在tomcat配置文件server.xml中的&lt;Connector ... /&gt;配置中，和连接数相关的参数有：<br />minProcessors：最小空闲连接线程数，用于提高系统处理性能，默认值为10<br />maxProcessors：最大连接线程数，即：并发处理的最大请求数，默认值为75<br />acceptCount：允许的最大连接数，应大于等于maxProcessors，默认值为100<br />enableLookups：是否反查域名，取值为：true或false。为了提高处理能力，应设置为false<br />connectionTimeout：网络连接超时，单位：毫秒。设置为0表示永不超时，这样设置有隐患的。通常可设置为30000毫秒。</p><p>其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数，应同时加大这两个参数。</p><p><br />web server允许的最大连接数还受制于操作系统的内核参数设置，通常Windows是2000个左右，Linux是1000个左右。Unix中如何设置这些参数，请参阅Unix常用监控和管理命令 </p><p>tomcat4中的配置示例：<br />&lt;Connector className="org.apache.coyote.tomcat4.CoyoteConnector"<br />port="8080" minProcessors="10" maxProcessors="1024"<br />enableLookups="false" redirectPort="8443"<br />acceptCount="1024" debug="0" connectionTimeout="30000" /&gt; </p><p>对于其他端口的侦听配置，以此类推。</p><p>2. tomcat中如何禁止列目录下的文件<br />在/conf/web.xml中，把listings参数设置成false即可，如下：<br />&lt;servlet&gt;<br />...<br />&lt;init-param&gt;<br />&lt;param-name&gt;listings&lt;/param-name&gt;<br />&lt;param-value&gt;false&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />...<br />&lt;/servlet&gt; </p><p>3. 如何加大tomcat可以使用的内存</p><p>tomcat默认可以使用的内存为64MB，在较大型的应用项目中，这点内存是不够的，需要调大。</p><p>Unix下，在文件/bin/catalina.sh的前面，增加如下设置：<br />JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'<br />需要把这个两个参数值调大。例如：<br />JAVA_OPTS='-Xms256m -Xmx512m'<br />表示初始化内存为256MB，可以使用的最大内存为512MB </p><p>4. 如何添加默认访问页面<br />修改文件web.xml，在welcome-list里面添加index.wml作为默认的访问页面<br />&lt;welcome-file-list&gt;<br />    &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />    &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br />    &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />&lt;/welcome-file-list&gt;</p><img src ="http://www.blogjava.net/juhongtao/aggbug/45964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/juhongtao/" target="_blank">javaGrowing</a> 2006-05-13 12:49 <a href="http://www.blogjava.net/juhongtao/archive/2006/05/13/45964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat设置类似IIS的访问密码</title><link>http://www.blogjava.net/juhongtao/archive/2006/05/13/45963.html</link><dc:creator>javaGrowing</dc:creator><author>javaGrowing</author><pubDate>Sat, 13 May 2006 04:29:00 GMT</pubDate><guid>http://www.blogjava.net/juhongtao/archive/2006/05/13/45963.html</guid><wfw:comment>http://www.blogjava.net/juhongtao/comments/45963.html</wfw:comment><comments>http://www.blogjava.net/juhongtao/archive/2006/05/13/45963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/juhongtao/comments/commentRss/45963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/juhongtao/services/trackbacks/45963.html</trackback:ping><description><![CDATA[
		<p>例如你要控制对ROOT目录下文件的访问：首先更改$TOMCAT_HOME/ROOT/WEB-INF/web.xml </p>
		<p>　　1.在&lt;web-app&gt;和&lt;/web-app&gt;之间加入 <br /><br />　　&lt;security-constraint&gt; <br />　　&lt;web-resource-collection&gt; <br />　　&lt;web-resource-name&gt;Entire Application&lt;/web-resource-name&gt; <br />　　&lt;url-pattern&gt;/*&lt;/url-pattern&gt; <br />　　&lt;/web-resource-collection&gt; <br />　　&lt;auth-constraint&gt; <br />　　&lt;!-- NOTE: This role is not present in the default users file --&gt; <br />　　&lt;role-name&gt;user&lt;/role-name&gt; <br />　　&lt;/auth-constraint&gt; <br />　　&lt;/security-constraint&gt; <br /><br />　　&lt;!-- Define the Login Configuration for this Application --&gt; <br />　　&lt;login-config&gt; <br />　　&lt;auth-method&gt;BASIC&lt;/auth-method&gt; <br />　　&lt;realm-name&gt;TEST ACCESS CONTROL&lt;/realm-name&gt; <br />　　&lt;/login-config&gt; <br /><br />　　2.然后在$TOMCAT_HOME/conf/tomcat-users.xml中加入 <br />　　<br />　　&lt;user name="user" password="password" roles="user"/&gt; <br />　　roles的名字和web.xml中的相对应 <br /><br />　　在TOMCAT4.03中测试通过  </p>
<img src ="http://www.blogjava.net/juhongtao/aggbug/45963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/juhongtao/" target="_blank">javaGrowing</a> 2006-05-13 12:29 <a href="http://www.blogjava.net/juhongtao/archive/2006/05/13/45963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何增大以Windows服务方式运行的Tomcat的可用内存   </title><link>http://www.blogjava.net/juhongtao/archive/2006/05/13/45959.html</link><dc:creator>javaGrowing</dc:creator><author>javaGrowing</author><pubDate>Sat, 13 May 2006 03:58:00 GMT</pubDate><guid>http://www.blogjava.net/juhongtao/archive/2006/05/13/45959.html</guid><wfw:comment>http://www.blogjava.net/juhongtao/comments/45959.html</wfw:comment><comments>http://www.blogjava.net/juhongtao/archive/2006/05/13/45959.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/juhongtao/comments/commentRss/45959.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/juhongtao/services/trackbacks/45959.html</trackback:ping><description><![CDATA[
		<p>首先安装<font color="red">tomcat</font>时候最好选择zip打包方式直接解压到某个目录！</p>
		<p>打开{tomat}/bin/service.bat，找到如下一行</p>
		<p>"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp" --JvmMs 128 --JvmMx 256</p>
		<p>知道怎么做了嘛？把128和256替换成你想要的值，例如初始内存256，最大内存512。第一个数值是初始内存大小，单位是兆，第二个数值是最大内存！</p>
		<p>修改完保存该文件后执行如下命令来安装服务</p>
		<p>service install {service_name}</p>
		<p>{service_name}替换成你想 </p>
<img src ="http://www.blogjava.net/juhongtao/aggbug/45959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/juhongtao/" target="_blank">javaGrowing</a> 2006-05-13 11:58 <a href="http://www.blogjava.net/juhongtao/archive/2006/05/13/45959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat之配置多个虚拟主机指向同一个应用  </title><link>http://www.blogjava.net/juhongtao/archive/2006/05/13/45955.html</link><dc:creator>javaGrowing</dc:creator><author>javaGrowing</author><pubDate>Sat, 13 May 2006 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/juhongtao/archive/2006/05/13/45955.html</guid><wfw:comment>http://www.blogjava.net/juhongtao/comments/45955.html</wfw:comment><comments>http://www.blogjava.net/juhongtao/archive/2006/05/13/45955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/juhongtao/comments/commentRss/45955.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/juhongtao/services/trackbacks/45955.html</trackback:ping><description><![CDATA[
		<p>当我们需要将多个域名同时指向同一个应用，而且要求不能跟Tomcat默认的应用冲突时怎么办？ 今天 <a href="http://yhe.dl.cn/" target="_blank">小红帽</a> 问起这个问题，顺便研究了一下，可以通过下面配置来实现</p>
		<span class="Code">
				<p>&lt;Host name="javayou.com" appBase="webapps"<br />       unpackWARs="true" autoDeploy="false"<br />       xmlValidation="false" xmlNamespaceAware="false"&gt;<br />       &lt;Alias&gt;www.javayou.com&lt;/Alias&gt;<br />       &lt;Alias&gt;wap.javayou.com&lt;/Alias&gt;<br />       &lt;Context path="" docBase="C:\PROJECTS\JAVA\DLOG4J_V3\webapp" reloadable="true"/&gt;<br />&lt;/Host&gt;</p>
		</span>
		<p>上面的例子把三个域名分别是 javayou.com, <a href="http://www.javayou.com/">www.javayou.com</a>, wap.javayou.com 都指到了dlog这个应用。</p>
		<p>当然了，如果你的Tomcat只跑一个应用那就不用那么费劲了，把name设置为localhost就搞定了，别说是三个域名了，三万个也没问题啊。</p>
<img src ="http://www.blogjava.net/juhongtao/aggbug/45955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/juhongtao/" target="_blank">javaGrowing</a> 2006-05-13 11:53 <a href="http://www.blogjava.net/juhongtao/archive/2006/05/13/45955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat中设置远程debug方法</title><link>http://www.blogjava.net/juhongtao/archive/2006/05/11/45596.html</link><dc:creator>javaGrowing</dc:creator><author>javaGrowing</author><pubDate>Thu, 11 May 2006 01:36:00 GMT</pubDate><guid>http://www.blogjava.net/juhongtao/archive/2006/05/11/45596.html</guid><wfw:comment>http://www.blogjava.net/juhongtao/comments/45596.html</wfw:comment><comments>http://www.blogjava.net/juhongtao/archive/2006/05/11/45596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/juhongtao/comments/commentRss/45596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/juhongtao/services/trackbacks/45596.html</trackback:ping><description><![CDATA[
		<div>
				<div>
						<div>何为远程调试？我们一般调试一个web项目的java代码时，需要将你的tomcat服务器和你的开发工具（比如Jbuilder）集成，或需要工具的一些插件支持(比如Eclipse下的myclipse等)，这些方式都是在本地进行，即你的开发工具和tomcat运行在同一台服务器上，如果你的开发工具和服务器不再一台机器上那就需要实现远程调试功能了。<br /><br />实现方法：<br />在tomcat的catalina.bat文件中加入下面的设置，当然SET CATALINA_OPTS 变量应该在使用它之前。这是在tomcat启动时设置一些虚拟机参数，使服务器允许远程连接功能，address=5888表示远程连接的端口号，可以设置成任意其他不冲突端口。其他的应用服务器比如weblogic也应该可以设置这些参数，有兴趣的可以测试。<br /><br /></div>
						<div>
								<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)">
										<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
										<span style="COLOR: rgb(0,0,0)">SET CATALINA_OPTS</span>
										<span style="COLOR: rgb(0,0,0)">=</span>
										<span style="COLOR: rgb(0,0,0)">-server -Xdebug -Xnoagent -Djava.compiler</span>
										<span style="COLOR: rgb(0,0,0)">=</span>
										<span style="COLOR: rgb(0,0,0)">NONE -Xrunjdwp:transport</span>
										<span style="COLOR: rgb(0,0,0)">=</span>
										<span style="COLOR: rgb(0,0,0)">dt_socket</span>
										<span style="COLOR: rgb(0,0,0)">,</span>
										<span style="COLOR: rgb(0,0,0)">server</span>
										<span style="COLOR: rgb(0,0,0)">=</span>
										<span style="COLOR: rgb(0,0,0)">y</span>
										<span style="COLOR: rgb(0,0,0)">,</span>
										<span style="COLOR: rgb(0,0,0)">suspend</span>
										<span style="COLOR: rgb(0,0,0)">=</span>
										<span style="COLOR: rgb(0,0,0)">n</span>
										<span style="COLOR: rgb(0,0,0)">,</span>
										<span style="COLOR: rgb(0,0,0)">address</span>
										<span style="COLOR: rgb(0,0,0)">=</span>
										<span style="COLOR: rgb(0,0,0)">5888</span>
										<span style="COLOR: rgb(0,0,0)"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
								</div>
								<br />这样就Ok了，重启动tomcat,可以直接独立启动，而不用在eclipes的插件中启动。打开eclipse中的debug设置窗口，选择Remote Java Application ，新建一个debug项，输入服务器IP和刚才设置端口号，点ok就可以进入debug状态了。Jbuilder中同样可以设置Remote Java Application。</div>
						<div> </div>
						<div> </div>
						<div>另有Javaeyes论坛的一片文章如下</div>
						<div>
								<a href="http://www.hibernate.org.cn/viewtopic.php?t=799&amp;postdays=0&amp;postorder=asc&amp;start=0">http://www.hibernate.org.cn/viewtopic.php?t=799&amp;postdays=0&amp;postorder=asc&amp;start=0</a>
						</div>
						<div> </div>
						<div>ibm论坛的原始文章如下</div>
						<div>
								<a href="http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/">http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/</a>但是该文章没有说明如何设置tomcat使其启动后支持远程调试连接。</div>
						<div> </div>
						<div>用以参考~</div>
						<div> </div>
						<div>
								<pre class="examplecode">&lt;jvmarg value="-Xdebug"/&gt;<br />        &lt;jvmarg value="-Xnoagent"/&gt;<br />        &lt;jvmarg value="-Djava.compiler=none"/&gt;<br />        &lt;jvmarg value-Xrunjdwp:transport=dt_socket,server=y,address=4000,suspend=n"/&gt;</pre>
								<br /> </div>
				</div>
				<div>
				</div>
		</div>
		<div>另外（version 4.1.29）：</div>
		<div>我手工将catalina.bat中</div>
		<div>set JPDA=</div>
		<div>修改为</div>
		<div>set JPDA=jpda<br />set JPDA_TRANSPORT=dt_socket<br />set JPDA_ADDRESS=XXXX</div>
		<div>然后在eclipse里面创建一个remote java application ，将port设置为XXXX的值，也可。</div>
		<div>因为调试的启用，无非设置transport属性允许远程连接并且指定一个端口号而已，指定之后在eclipse里面对应的配置该端口号即可。</div>
<img src ="http://www.blogjava.net/juhongtao/aggbug/45596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/juhongtao/" target="_blank">javaGrowing</a> 2006-05-11 09:36 <a href="http://www.blogjava.net/juhongtao/archive/2006/05/11/45596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>