??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧美中文日韩视频,亚洲一线产区二线产区精华,亚洲精品无码专区久久久http://m.tkk7.com/juhongtao/category/11079.htmlzh-cnFri, 02 Mar 2007 06:54:06 GMTFri, 02 Mar 2007 06:54:06 GMT60Tomcat5下server.xml的翻?/title><link>http://m.tkk7.com/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://m.tkk7.com/juhongtao/archive/2006/10/17/75617.html</guid><wfw:comment>http://m.tkk7.com/juhongtao/comments/75617.html</wfw:comment><comments>http://m.tkk7.com/juhongtao/archive/2006/10/17/75617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/juhongtao/comments/commentRss/75617.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/juhongtao/services/trackbacks/75617.html</trackback:ping><description><![CDATA[ <!-- Example Server Configuration File --> <br /><!-- Tomcat<a class="channel_keylink" target="_blank">服务?/a>配置CZ文g --> <br /><br /><!-- Note that component elements are nested corresponding to their <br />     parent-child relationships with each other --> <br /><!-- 注意Q这些组件的构成是根据相互之间的父子关系q行嵌套的?-> <br /><br /><!-- 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 /> --> <br /><!-- 一个“Server”是一个提供完整的JVM的独立组Ӟ它可以包含一个或多个 <br />     “Service”实例?a class="channel_keylink" target="_blank">服务?/a>在指定的端口上监听shutdown命o? <br />      <br />     注意Q一个“Server”自w不是一个“Container”(容器Q,因此在这里你 <br />     不可以定义诸如“Valves”或者“Loggers”子lg <br />--> <br /><br /><Server port="8005" shutdown="SHUTDOWN" debug="0"> <br /><br /><br />  <!-- Comment these entries out to disable JMX MBeans support --> <br />  <!-- q些指olg关闭JMX MBeans支持 --> <br />   <br />  <!-- 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 />  --> <br />  <!-- 你也可以通过包含你自qmbean描述文g配置自定义的lgQ然后设|? <br />       “descriptors”属性ؓ以“;”ؓ分隔的文件名列表严将它添加到默认列表 <br />       中,例如Qdescriptors="/com/myfirm/mypackage/mbean-descriptor.xml"? <br /> --> <br />        <br />  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" <br />            debug="0"/> <br />  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" <br />            debug="0"/> <br /><br />  <!-- Global JNDI resources --> <br />  <!-- 全局JNDI资源 --> <br />  <GlobalNamingResources> <br /><br />    <!-- Test entry for demonstration purposes --> <br />    <!-- ZCZ目的的测试入口?-> <br />    <Environment name="simpleValue" type="java.lang.Integer" value="30"/> <br /><br />    <!-- Editable user database that can also be used by <br />         UserDatabaseRealm to authenticate users --> <br />    <!-- 可编辑的Q用来通过UserDatabaseRealm认证用户的用h据库 --> <br />     <br />    <Resource name="UserDatabase" auth="Container" <br />              type="org.apache.catalina.UserDatabase" <br />       description="User database that can be updated and saved"> <br />    </Resource> <br />    <ResourceParams name="UserDatabase"> <br />      <parameter> <br />        <name>factory</name> <br />        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value> <br />      </parameter> <br />      <parameter> <br />        <name>pathname</name> <br />        <value>conf/tomcat-users.xml</value> <br />      </parameter> <br />    </ResourceParams> <br /><br />  </GlobalNamingResources> <br /><br />  <!-- 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 />   --> <br />  <!-- 一个“Service”是一个或多个q一个单独“Container?容器)的“Connectors? <br />       l合Q因此,应用E序在容器中可见Q。通常Q这个容器是一个“Engine? <br />       Q引擎)Q但q不是必ȝ? <br />        <br />       注意Q一个“Service”自w不是一个容器,因此Q在q个U别上你不可定义 <br />       诸如“Valves”或“Loggers”子lg? <br />  --> <br /><br />  <!-- Define the Tomcat Stand-Alone Service --> <br />  <!-- 定义Tomcat的标准独立服务?-> <br />  <Service name="Catalina"> <br /><br />    <!-- 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 />    --> <br />    <!-- 一个“Connector”(q接器)代表一个请求被接收和应{所需要的端点。每个连 <br />         接器通过相关的“Container”(容器Q处理请求? <br />          <br />         默认情况下,一个非SSL的HTTP/1.1的连接器被绑定在端口8080。你也可以通过 <br />         Ҏ后面的用说明ƈ取消W二个连接器入口的注释,在端?443上徏立一? <br />         SSL HTTP/1.1的连接器。开放SSL支持需要下面几步(参见Tomcat 5文档中怎样 <br />         配置SSL的说明以取得更多的详l信息)Q? <br />         * 如果你的JDK?.3?.3以前的版本,下蝲安装JSSE 1.0.2或以后版本,q放 <br />           |JAR文g到?JAVA_HOME/jre/lib/ext”目录下? <br />         * 带一个“changeit”的口o值执行: <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应用E序调用hӞDNS查询是可行的。这对性能? <br />         成一些不利的影响Q因此,你可以将“enableLookups”设|ؓ“false”来关闭DNS <br />         查询。当DNS查询被关闭时Qrequest.getRemoteHost()返回包含远E客户IP? <br />         址的字W串? <br />  --> <br /><br />    <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 --> <br />    <!-- ?080端口上定义一个非SSL的HTTP/1.1q接器?-> <br />    <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" /> <br />    <!-- Note : To disable connection timeouts, set connectionTimeout value <br />     to 0 --> <br />    <!-- 注意Q要关闭q接时Q将connectionTimeout讄? --> <br /><br /><!-- 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 />--> <br /><!-- 注意Q要使用gzip压羃需要设|如下属性: <br /><br />compression="on" <br />compressionMinSize="2048" <br />noCompressionUserAgents="gozilla,traviata" <br />compressableMimeType="text/html,text/xml" <br />--> <br /><br />    <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 --> <br />    <!-- 在端?443上定义一个SSL的HTTP/1.1的连接器 --> <br />    <!-- <br />    <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" /> <br />    --> <br /><br />    <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 --> <br />    <!-- 在端?009上定义一个Coyote/JK2 AJP 1.3q接器?-> <br />    <Connector port="8009"  <br />               enableLookups="false" redirectPort="8443" debug="0" <br />               protocol="AJP/1.3" /> <br /><br />    <!-- Define a Proxied HTTP/1.1 Connector on port 8082 --> <br />    <!-- ?082端口上定义一个代理HTTP/1.1q接器?-> <br />    <!-- See proxy documentation for more information about using this. --> <br />    <!-- 参见代理文档以取得这里用属性的更多的信息。?-> <br />    <!-- <br />    <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" /> <br />    --> <br /><br />    <!-- 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). --> <br />    <!-- 一个“Engine”(引擎Q代表处理每个请求的入口点(在Catalina内)。这个Tomcat <br />         的标准独立引擎实现分析包含在h中的HTTP头信息,q将h传送到适当的主? <br />         或虚拟主Z?-> <br /><br />    <!-- You should set jvmRoute to support load-balancing via JK/JK2 ie : <br />    <Engine name="Standalone" defaultHost="localhost" debug="0" jvmRoute="jvm1">  <br />    -->  <br />    <!-- 你应该这栯|jvmRoute以便在JK/JK2通道上支持负载^衡: <br />    <Engine name="Standalone" defaultHost="localhost" debug="0" jvmRoute="jvm1"> <br />    --> <br />          <br />    <!-- Define the top level container in our container hierarchy --> <br />    <!-- 在我们的容器体系中定义最高别的容器 --> <br />    <Engine name="Catalina" defaultHost="localhost" debug="0"> <br /><br />      <!-- 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 <Host> or <Context> 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. --> <br />      <!-- h转储器D{储非常有用的通过Tomcatq个实例接收到的所有请求的Q关? <br />           接收到的h头和cookiesQ以及发送出的回应头和cookies的调试信息。如? <br />           你只在意一个特定的虚拟L或者一个特定应用程序的hQ在对应?lt;Host> <br />           ?lt;Context>入口中套用这个元素? <br />            <br />           对于所有的ServletQ小服务E序Q?.4来所Q在CZE序中检? <br />           “RequestDumperFilter”过滤是非常Ҏ的(q个qo器源代码可以? <br />           ?CATALINA_HOME/webapps/examples/WEB-INF/classes/filters”下扑ֈ? <br />            <br />           h转储默认情况下是关闭的,如果要用它Q取消下面行的注释符?-> <br />      <!-- <br />      <Valve className="org.apache.catalina.valves.RequestDumperValve"/> <br />      --> <br /><br />      <!-- Global logger unless overridden at lower levels --> <br />      <!-- 全局日志讄Q除非在更低的别上覆盖它的讄 --> <br />      <Logger className="org.apache.catalina.logger.FileLogger" <br />              prefix="catalina_log." suffix=".txt" <br />              timestamp="true"/> <br /><br />      <!-- Because this Realm is here, an instance will be shared globally --> <br />      <!-- 因ؓq个RealmQ区域)在这儿,因此q个实例被全局׃n。?-> <br /><br />      <!-- 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. --> <br />      <!-- q个RealmQ区域)使用在全局JNDI资源下,由“UserDatabase”配|的用户 <br />           数据库。通过使用Realm对于q个用户数据库的M~辑都将会立卛_? <br />      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" <br />                 debug="0" resourceName="UserDatabase"/> <br /><br />      <!-- Comment out the old realm but leave here for now in case we <br />           need to go back quickly --> <br />      <!-- 注释掉旧有的Realm以便我们能很快速的恢复旧有配置。?-> <br />      <!-- <br />      <Realm className="org.apache.catalina.realm.MemoryRealm" /> <br />      --> <br /><br />      <!-- Replace the above Realm with one of the following to get a Realm <br />           stored in a database and accessed via JDBC --> <br />      <!-- 下面的属性用于从储存在数据库或从JDBC通道中得到的Realm以取代上面的 <br />           Realm配置?-> <br /><br />      <!-- <br />      <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" /> <br />      --> <br /><br />      <!-- <br />      <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" <br />             driverName="oracle.jdbc.driver.<a class="channel_keylink" 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" /> <br />      --> <br /><br />      <!-- <br />      <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" /> <br />      --> <br /><br />      <!-- Define the default virtual host <br />           Note: XML Schema validation will not work with Xerces 2.2. <br />       --> <br />      <!-- 定义默认的虚拟主? <br />           注意QXML模式认不能与Xerces 2.2同工作? <br />      --> <br />      <Host name="localhost" debug="0" appBase="webapps" <br />       unpackWARs="true" autoDeploy="true" <br />       xmlValidation="false" xmlNamespaceAware="false"> <br /><br />        <!-- 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 />             个结点定义一个群集,通过定义q个元素Q意味着每个理员都被改变? <br />             因此Q当q行一个群集时Q只有确认在必须被聚集和U除其他的地Ҏ你的 <br />             web软g? <br />             一个群集有下面q些参数Q? <br /><br />             className = the fully qualified name of the cluster class <br />             className = q个集cȝ全限定名 <br /><br />             name = a descriptive name for your cluster, can be anything <br />             name = 你的集的描q名Q可以是M描述 <br /><br />             debug = the debug level, higher means more output <br />             debug = 调试U别Q更高意味着更多的输? <br /><br />             mcastAddr = the multicast address, has to be the same for all the nodes <br />             mcastAddr = 多播地址Q所有的节点都必L同样的多播地址 <br /><br />             mcastPort = the multicast port, has to be the same for all the nodes <br />             mcastPort = 多播端口Q对所有的节点都必L同样的多播端? <br />              <br />             mcastBindAddr = bind the multicast socket to a specific address <br />             mcastBindAddr = l定多播套接字到一个指定的地址 <br />              <br />             mcastTTL = the multicast TTL if you want to limit your broadcast <br />             mcastTTL = 多播生存期,如果你想要限制你的广播的? <br />              <br />             mcastSoTimeout = the multicast readtimeout <br />             mcastSoTimeout = 多播d时 <br /><br />             mcastFrequency = the number of milliseconds in between sending a "I'm alive" heartbeat <br />             mcastFrequency = 发送“I'm alive”(我还zȝQ信息的间隔毫秒? <br /><br />             mcastDropTime = the number a milliseconds before a node is considered "dead" if no heartbeat is received <br />             mcastDropTime = 多长旉没有收到“I'm alive”就这个节Ҏ识ؓ死节点(单位Q毫U) <br /><br />             tcpThreadCount = the number of threads to handle incoming replication requests, optimal would be the same amount of threads as nodes  <br />             tcpThreadCount = 用于处理重复引入h的线E数Q最好是每个节点都有相同的线E数 <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" target="_blank">|卡</a>的主Z的监听TCP集h的地址Q绑定地址Q, <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" target="_blank">操作pȝ</a>中有java.nio唤醒错的情况下,使用Selector.select()的超? <br />                                  毫秒数。设?则没有超旉? <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 />                            <% <br />                            HashMap map = (HashMap)session.getAttribute("map"); <br />                            map.put("key","value"); <br />                            %> <br />             useDirtyFlag = true意味着我们只能在调用setAttributeQremoveAttribute后才能复制一个会话; <br />                            false意味着在每个请求后复制会话? <br />                            false意味着复制以下列代码方式工作Q? <br />                            <% <br />                            HashMap map = (HashMap)session.getAttribute("map"); <br />                            map.put("key","value"); <br />                            %> <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意味着在多个套接字上同步进行复制。例如,先复制数据,然后hq回? <br />                               q与“synchronous”相同,除了它用一个套接字池,因此Q它是多U程的。它? <br />                               最快和最高的设|,使用q个配置也增加了处理复制的tcpU程的域? <br />                               * Synchronous指执行请求的U程Q它也是向其他节点复制数据的U程Qƈ且直? <br />                               所有的节点都己l收C息后才返回? <br />                               * AsynchronousQ对每个集节点而言Q这是一个特别的“sender”(发送者)U程Q? <br />                               因此hU程复制请求排队到一个小队列中,然后Q返回给用户? <br />                               q个队列是一个当会话被添加到队列中,而从先前的请求中Q同一个会话己l存? <br />                               Q这个会话将被放|在队列中以代替重复的两个请求。这几乎从不会发生,除非存在 <br />                               较大的网lgq? <br />        -->  <br />        <!-- <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 />        --> <br />        <!-- 当配|群集时Q你也添加一个值来捕获所有传入的hQ在hl束Ӟq个会话可能被子复制Q? <br />             也可能不被复制。一个会话是否复制取决于下列条g是否发生Q? <br />             1. useDirtyFlag为真Q或者setAttribute或者removeAttributeq被调用? <br />             2. 会话q存在Q己l被创徏了)? <br />             3. h没有被“filter”属性所捕获? <br />              <br />             q个filterQ过滤器Q属性用于过滤那些不能修改会话的hQ因此,我们在这个请求结束后不复? <br />             会主。这个过滤器是消极的Q例如,你向qo器发送了一些东西,然后被过滤出去,在那个匹配的q? <br />             滤器上不会发生复制? <br />             qo器属性以分号为分隔,因此你不能换行,即你想q么做? <br />              <br />             filter=".*\.gif;.*\.js;"意味着在进行以.gif?jsl束的URIh后不复制会话? <br />         <br />        <!-- <br />        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" <br />                 managerClassName="org.apache.catalina.cluster.session.DeltaManager" <br />                 expireSessionsOnShutdown="false" <br />                 useDirtyFlag="true"> <br /><br />            <Membership  <br />                className="org.apache.catalina.cluster.mcast.McastService" <br />                mcastAddr="228.0.0.4" <br />                mcastPort="45564" <br />                mcastFrequency="500" <br />                mcastDropTime="3000"/> <br /><br />            <Receiver  <br />                className="org.apache.catalina.cluster.tcp.ReplicationListener" <br />                tcpListenAddress="auto" <br />                tcpListenPort="4001" <br />                tcpSelectorTimeout="100" <br />                tcpThreadCount="6"/> <br /><br />            <Sender <br />                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter" <br />                replicationMode="pooled"/> <br /><br />            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve" <br />                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/> <br />        </Cluster> <br />        -->  <br /><br /><br /><br />        <!-- 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. --> <br />        <!-- 通常Q对每一个应用程序,用户必须逐个的认证他们自己。当他们遇到? <br />             某种安全U束所保护的资源时Q如果你惌用户只在W一ơ被认证Q那么, <br />             取消下面入口行的注释Q然后在q个虚拟L中包含这个用LQ横跨所? <br />             web应用E序的用戯n份识别?-> <br />              <br />        <!-- <br />        <Valve className="org.apache.catalina.authenticator.SingleSignOn" <br />                   debug="0"/> <br />        --> <br /><br />        <!-- <a class="channel_keylink" 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 />        --> <br />        <!-- q个虚拟L的所有请求的讉K日志q程。默认情况下Q日志文件被创徏在相? <br />             ?CATALINA_HOME目录下的logs目录下。通过directory属性,你也可以指定一? <br />             不同的目录,如果你想的话。可以用相对\径(相对?CATALINA_HOMEQ,? <br />             可以使用l对路径?-> <br />        <!-- <br />        <Valve className="org.apache.catalina.valves.<a class="channel_keylink" target="_blank">Access</a>LogValve" <br />                 directory="logs" prefix="localhost_access_log." suffix=".txt" <br />                 pattern="common" resolveHosts="false"/> <br />        --> <br /><br />        <!-- 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.--> <br />        <!-- 与这个虚拟主机有关系所有上下文所׃n的日志。默认情况下Q用FileLoggerӞQ? <br />             日志文g被创建在相对?CATALINA_HOME目录下的logs目录下。如果你希望Q你也可 <br />             以给directory指定一个不同的路径。可以用相对于$CATALINA_HOME的相对\径,? <br />             可以使用l对路径? <br />        <Logger className="org.apache.catalina.logger.FileLogger" <br />                 directory="logs" prefix="localhost_log." suffix=".txt" <br />            timestamp="true"/> <br /><br />      </Host> <br /><br />    </Engine> <br /><br />  </Service> <br /><br /></Server><img src ="http://m.tkk7.com/juhongtao/aggbug/75617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/juhongtao/" target="_blank">javaGrowing</a> 2006-10-17 14:47 <a href="http://m.tkk7.com/juhongtao/archive/2006/10/17/75617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat Class Loader HOW-TOhttp://m.tkk7.com/juhongtao/archive/2006/10/17/75616.htmljavaGrowingjavaGrowingTue, 17 Oct 2006 06:43:00 GMThttp://m.tkk7.com/juhongtao/archive/2006/10/17/75616.htmlhttp://m.tkk7.com/juhongtao/comments/75616.htmlhttp://m.tkk7.com/juhongtao/archive/2006/10/17/75616.html#Feedback0http://m.tkk7.com/juhongtao/comments/commentRss/75616.htmlhttp://m.tkk7.com/juhongtao/services/trackbacks/75616.html当Tomcat5启动以后Q它创徏一pdcd载器。这些类加蝲器以父子关系l织在一P父类加蝲器在子类加蝲器的上面Q?/p>
      Bootstrap
          |
       System
          |
       Common
      /      \
Catalina   Shared
                     /   \
        Webapp1  Webapp2 ...

q些cd载器所扮演的角Ԍ以及它们可以见到的类和资源的规则如下Q?br />
如上图所C,Tomcat5 在初始化的时候创建如下类加蝲器:

Bootstrap
- q个cd载器可以加蝲Java虚拟机的q行时基c,以及在系l扩展目?$JAVA_HOME/jre/lib/ext)中的所有Jar包中的类?strong>注意Q一些JVM可能用多个类加蝲器来实现它,或者它是根本不能被看见的?br />
System
- q个cd载器一般可以加?font face="Courier New">CLASSPATH环境变量的内宏V所有这个类对于Tomcat内部的类和web应用E序的都是可见的。尽如此,标准的Tomcat5启动脚本($CATALINA_HOME/bin/catalina.sh ?%CATALINA_HOME%\bin\catalina.bat)都会忽略CLASSPATH环境变量Q取而代之的是从如下仓库加蝲Q?/font>

  • $CATALINA_HOME/bin/bootstrap.jar - 包含Tomcat5 服务器初始化的main()ҎQ以及所需的类加蝲器的实现cR?
  • $JAVA_HOME/lib/tools.jar - 包括把JSP面~译成SerletcL需?javac"~译?
  • $CATALINA_HOME/bin/commons-logging-api.jar - Jakarta commons logging API.
  • $CATALINA_HOME/bin/commons-daemon.jar - Jakarta commons daemon API.
  • jmx.jar - The JMX 1.2 实现.

Common - q个cd载器可以使一些附加的cd?font face="Courier New">Tomcat 内部的类和web应用E序可见。正常情况下Q应用程序不应该替换它。所?CATALINA_HOME/common/classes目录下的未打包类? 资源Q以?CATALINA_HOME/commons/endorsed?CATALINA_HOME/commons/i18n? CATALINA_HOME/common/lib目录下的Jar包中的类和资源都是这个类加蝲器的加蝲对象。默认情况,包括如下内容Q?/font>         

  • commons-el.jar - Jakarta commons el, Jasper用的EL表达式实?
  • jasper-compiler.jar - The JSP 2.0 ~译?
  • jasper-compiler-jdt.jar - The Eclipse JDT Java ~译?
  • jasper-runtime.jar - The JSP 2.0 q行?
  • jsp-api.jar - The JSP 2.0 API.
  • naming-common.jar - Tomcat5的JNDI 实现Q用于内存命名环?
  • naming-factory.jar - Tomcat5的JNDI 实现Q用于企业资源引用(EJB, connection pools).
  • naming-factory-dbcp.jar - Jakarta commons DBCP, 为Web应用E序提供JDBCq接池。这个类已经从默认的org.apache.commons包中Ud?
  • naming-java.jar -  java命名I间处理?
  • 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.
  • servlet-api.jar - The Servlet 2.4 API.
  • 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.

Catalina - q个cd载器主要加蝲Tomcat5自己所需要的cd资源。这些类和资源对于Web应用E序是完全不可见的。在$CATALINA_HOME/server/classes目录下的所有类和资源,$CATALINA_HOME/server/lib下的所有Jar包中cd资源是这个类加蝲器的加蝲对象。默认情况,包括个如下内容:

  • catalina.jar - Tomcat5中Catalina Servlet容器的实现部分?
  • catalina-ant.jar - 在管理web应用E序时要用倒的一些Antd?
  • catalina-optional.jar - 一些Catalina可选组件?
  • commons-modeler.jar - Tomcat通过JMX暴露其内部对象是用的一些MBean实现?
  • servlets-xxxxx.jar - q些cd内部的Servlet一h供Tomcat的部分功能,它们都是独立的,所以如果不需要相应的服务可以其删除。或者它们可以从属于特定的安全管理器?
  • tomcat-coyote.jar - Coyote API.?
  • tomcat-http.jar - 标准的Java HTTP/1.1 q接??
  • tomcat-ajp.jar - AJP web 服务器的q接器,一般用于ApacheQiPlanet iAS?iWS.?
  • tomcat-util.jar - Tomcatq接器需要的工具cR?

Shared - q个cd载器用于把一些类和资源共享给所?/strong>的web应用E序?除非Tomcat内部的类也需要访问这些类Q在q种情况下你应该把它们放?strong>Commoncd载能加蝲的地?. ?font face="Courier New">$CATALINA_BASE/shared/classes 目录下的所有未打包cd资源Q以?CATALINA_BASE/shared/lib目录下的所有Jar包中的类和资源可以被其加载。如果通过$ CATALINA_BASE环境变量来从同一个tomcatE序q行了多个在实例Q那么这个类加蝲器的仓库是相对于$CATALINA_BASE而不? CATALINA_HOME?/font> 

WebappX - pȝ会ؓ部v在一个Tomcat实例中的每个应用E序创徏一个这Lcd载器Q它们ؓ所属的应用E序加蝲cR所有你的web应用E序包的/WEB-INF/classes目录下的cd资源Q以?/font>
/WEB-INF/lib 目录下的所有Jar包中的类和资源是q个cȝ加蝲对象。这些类和资源仅对这个应用程序可见,q且q个应用E序也看不见其他应用E序的类和资源?br />
像上面所描述的,web应用E序的类加蝲的加载流E与默认的Java 2的类记蝲托管模型?strong>不一?/strong>的。当有一个请求需要应用程序的WebappX cd载器加蝲一个类的时候,q个cd载器?strong>首先? 自己的仓库中查找Q而不是先交给上面的类加蝲器查找。这里有一些例外。JRE的基cL不能被覆盖的。对于其他一些类Q如J2SE 1.4+中的XML解析器组ӞQ可以用J2SE1.4的签名特性。最后Q何包括servlet APIcȝJar包会被忽略。Tomcat5中的其他的类加蝲器用正常托模式?/p>

q样在一个web应用E序中,cd资源的加载顺序是q样Q?/p>

  • Bootstrap classes of your JVM
  • System class loader classses (described above)
  • /WEB-INF/classes of your web application
  • /WEB-INF/lib/*.jar of your web application
  • $CATALINA_HOME/common/classes
  • $CATALINA_HOME/common/endorsed/*.jar
  • $CATALINA_HOME/common/i18n/*.jar
  • $CATALINA_HOME/common/lib/*.jar
  • $CATALINA_BASE/shared/classes
  • $CATALINA_BASE/shared/lib/*.jar


javaGrowing 2006-10-17 14:43 发表评论
]]>
Tomcat配置技巧Top 10http://m.tkk7.com/juhongtao/archive/2006/05/15/46168.htmljavaGrowingjavaGrowingMon, 15 May 2006 02:00:00 GMThttp://m.tkk7.com/juhongtao/archive/2006/05/15/46168.htmlhttp://m.tkk7.com/juhongtao/comments/46168.htmlhttp://m.tkk7.com/juhongtao/archive/2006/05/15/46168.html#Feedback0http://m.tkk7.com/juhongtao/comments/commentRss/46168.htmlhttp://m.tkk7.com/juhongtao/services/trackbacks/46168.html

~者按Q现在开发Java Web应用Q徏立和部vWeb内容是一件很单的工作。用Jakarta Tomcat作ؓServlet和JSP容器的h已经遍及全世界。Tomcath免费、跨q_{诸多特性,q且更新得很快,现在非常的流行?br />


你所需要做的就是:按照你的需求配|TomcatQ只要你正确配置QTomcat一般都能适合你的要求。下面是一pd关于Tomcat的配|技巧,q些技巧源自于我的书:《Tomcat权威指南》,希望对你有所帮助。—?Jason Brittain



1Q?配置pȝ理QAdmin Web ApplicationQ?br />
大多数商业化的J2EE服务器都提供一个功能强大的理界面Q且大都采用易于理解的Web应用界面。Tomcat按照自己的方式,同样提供一个成熟的理工具Qƈ且丝毫不逊于那些商业化的竞争Ҏ。Tomcat的Admin Web Application最初在4.1版本时出玎ͼ当时的功能包括管理context、data source、user和group{。当然也可以理像初始化参数Quser、group、role的多U数据库理{。在后箋的版本中Q这些功能将得到很大的扩展,但现有的功能已经非常实用了?br />


Admin Web Application被定义在自动部v文gQCATALINA_BASE/webapps/admin.xml ?br />
Q译者注QCATALINA_BASE即tomcat安装目录下的server目录Q?br />


你必ȝ辑这个文Ӟ以确定Context中的docBase参数是绝对\径。也是_CATALINA_BASE/webapps/admin.xml 的\径是l对路径。作为另外一U选择Q你也可以删除这个自动部|文Ӟ而在server.xml文g中徏立一个Admin Web Application的contextQ效果是一L。你不能理Admin Web Applicationq个应用Q换而言之,除了删除CATALINA_BASE/webapps/admin.xml Q你可能什么都做不了?br />


如果你用UserDatabaseRealmQ默认)Q你需要添加一个user以及一个role到CATALINA_BASE/conf/tomcat-users.xml 文g中。你~辑q个文gQ添加一个名叫“admin”的role 到该文g中,如下Q?br />


<role name="admin"/>



你同样需要有一个用Pq且q个用户的角色是“admin”。象存在的用户那Pd一个用P改变密码使其更加安全Q:



<user name="admin" password="deep_dark_secret" roles="admin"/>



当你完成q些步骤后,请重新启动TomcatQ访问http://localhost:8080/adminQ你看C个登录界面。Admin Web Application采用Z容器理的安全机Ӟq用了Jakarta Struts框架。一旦你作ؓ“admin”角色的用户d理界面Q你能够用这个管理界面配|Tomcat?br />


2Q配|应用管理(Manager Web ApplicationQ?br />
Manager Web Application让你通过一个比Admin Web Application更ؓ单的用户界面Q执行一些简单的Web应用d?br />


Manager Web Application被被定义在一个自动部|文件中Q?br />


CATALINA_BASE/webapps/manager.xml ?br />


你必ȝ辑这个文Ӟ以确保context的docBase参数是绝对\径,也就是说CATALINA_HOME/server/webapps/manager的绝对\径?br />
Q译者注QCATALINA_HOME即tomcat安装目录Q?br />


如果你用的是UserDatabaseRealmQ那么你需要添加一个角色和一个用户到CATALINA_BASE/conf/tomcat-users.xml文g中。接下来Q编辑这个文Ӟd一个名为“manager”的角色到该文g中:



<role name=”manager?gt;



你同样需要有一个角色ؓ“manager”的用户。像已经存在的用户那Pd一个新用户Q改变密码其更加安全)Q?br />


<user name="manager" password="deep_dark_secret" roles="manager"/>



然后重新启动TomcatQ访问http://localhost/manager/listQ将看到一个很朴素的文本型理界面Q或者访问http://localhost/manager/html/listQ将看到一个HMTL的管理界面。不是哪种方式都说明你的Manager Web Application现在已经启动了?br />


Manager application让你可以在没有系l管理特权的基础上,安装新的Web应用Q以用于试。如果我们有一个新的web应用位于/home/user/hello下在Qƈ且想把它安装?/hello下,Z试q个应用Q我们可以这么做Q在W一个文件框中输入?hello”(作ؓ讉K时的pathQ,在第二个文本框中输入“file:/home/user/hello”(作ؓConfig URLQ?br />


Manager applicationq允怽停止、重新启动、移除以及重新部|一个web应用。停止一个应用其无法被讉KQ当有用户尝试访问这个被停止的应用时Q将看到一?03的错误——?03 - This application is not currently available”?br />


U除一个web应用Q只是指从Tomcat的运行拷贝中删除了该应用Q如果你重新启动TomcatQ被删除的应用将再次出现Q也是_U除q不是指从硬盘上删除Q?br />


3Q部|一个web应用

有两个办法可以在pȝ中部|web服务?br />
1> 拯你的WAR文g或者你的web应用文g夹(包括该web的所有内容)?CATALINA_BASE/webapps目录下?br />
2> Z的web服务建立一个只包括context内容的XML片断文gQƈ把该文g攑ֈ$CATALINA_BASE/webapps目录下。这个web应用本n可以存储在硬盘上的Q何地斏V?br />


如果你有一个WAR文gQ你若想部v它,则只需要把该文件简单的拯到CATALINA_BASE/webapps目录下即可,文g必须以?war”作为扩展名。一旦Tomcat监听到这个文Ӟ它将Q缺省的Q解开该文件包作ؓ一个子目录Qƈ以WAR文g的文件名作ؓ子目录的名字。接下来QTomcat在内存中徏立一个contextQ就好象你在server.xml文g里徏立一栗当Ӟ其他必需的内容,从server.xml中的DefaultContext获得?br />


部vweb应用的另一U方式是写一个Context XML片断文gQ然后把该文件拷贝到CATALINA_BASE/webapps目录下。一个Context片断q一个完整的XML文gQ而只是一个context元素Q以及对该应用的相应描述。这U片断文件就像是从server.xml中切取出来的context元素一P所以这U片断被命名为“context片断”?br />


举个例子Q如果我们想部v一个名叫MyWebApp.war的应用,该应用用realm作ؓ讉K控制方式Q我们可以用下面这个片断:



<!--

Context fragment for deploying MyWebApp.war

-->

<Context path="/demo" docBase="webapps/MyWebApp.war"

debug="0" privileged="true">

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"

resourceName="UserDatabase"/>

</Context>



把该片断命名为“MyWebApp.xml”,然后拯到CATALINA_BASE/webapps目录下?br />


q种context片断提供了一U便利的Ҏ来部|web应用Q你不需要编辑server.xmlQ除非你x变缺省的部vҎ,安装一个新的web应用时不需要重启动Tomcat?br />




4Q配|虚拟主机(Virtual HostsQ?br />
关于server.xml中“Host”这个元素,只有在你讄虚拟L的才需要修攏V虚拟主机是一U在一个web服务器上服务多个域名的机ӞҎ个域名而言Q都好象独n了整个主机。实际上Q大多数的小型商务网站都是采用虚拟主机实现的Q这主要是因拟主直接q接到Internetq提供相应的带宽Q以保障合理的访问响应速度Q另外虚拟主能提供一个稳定的固定IP?br />


Z名字的虚拟主机可以被建立在Q何web服务器上Q徏立的Ҏ是通过在域名服务器QDNSQ上建立IP地址的别名,q且告诉web服务器把d不同域名的请求分发到相应的网늛录。因文章主要是讲TomcatQ我们不准备介绍在各U操作系l上讄DNS的方法,如果你在q方面需要帮助,请参考《DNS and Bind》一书,作者是Paul Albitz and Cricket Liu (OReilly)。ؓ了示范方便,我将使用一个静态的L文gQ因是测试别名最单的Ҏ?br />
在Tomcat中用虚拟主机,你需要设|DNS或主机数据。ؓ了测试,为本地IP讄一个IP别名p够了Q接下来Q你需要在server.xml中添加几行内容,如下Q?br />


<Server port="8005" shutdown="SHUTDOWN" debug="0">

<Service name="Tomcat-Standalone">

<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"

port="8080" minProcessors="5" maxProcessors="75"

enableLookups="true" redirectPort="8443"/>

<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"

port="8443" minProcessors="5" maxProcessors="75"

acceptCount="10" debug="0" scheme="https" secure="true"/>

<Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory"

clientAuth="false" protocol="TLS" />

</Connector>

<Engine name="Standalone" defaultHost="localhost" debug="0">

<!-- This Host is the default Host -->

<Host name="localhost" debug="0" appBase="webapps"

unpackWARs="true" autoDeploy="true">

<Context path="" docBase="ROOT" debug="0"/>

<Context path="/orders" docBase="/home/ian/orders" debug="0"

reloadable="true" crossContext="true">

</Context>

</Host>



<!-- This Host is the first "Virtual Host": www.example.com -->

<Host name="www.example.com" appBase="/home/example/webapp">

<Context path="" docBase="."/>

</Host>



</Engine>

</Service>

</Server>



Tomcat的server.xml文gQ在初始状态下Q只包括一个虚拟主机,但是它容易被扩充到支持多个虚拟主机。在前面的例子中展示的是一个简单的server.xml版本Q其中粗体部分就是用于添加一个虚拟主机。每一个Host元素必须包括一个或多个context元素Q所包含的context元素中必L一个是默认的contextQ这个默认的context的显C\径应该ؓI(例如Qpath=””)?br />


5Q配|基验证QBasic AuthenticationQ?br />
容器理验证Ҏ控制着当用戯问受保护的web应用资源Ӟ如何q行用户的n份鉴别。当一个web应用使用了Basic AuthenticationQBASIC参数在web.xml文g中auto-method元素中设|)Q而有用户讉K受保护的web应用ӞTomcat通过HTTP Basic Authentication方式Q弹Z个对话框Q要求用戯入用户名和密码。在q种验证Ҏ中,所有密码将被以64位的~码方式在网l上传输?br />


注意Q用Basic Authentication通过被认为是不安全的Q因为它没有强健的加密方法,除非在客L和服务器端都使用HTTPS或者其他密码加密码方式Q比如,在一个虚拟私人网l中Q。若没有额外的加密方法,|络理员将能够截获Q或滥用Q用L密码。但是,如果你是刚开始用TomcatQ或者你惛_你的web应用中测试一下基于容器的安全理QBasic Authenticationq是非常易于讄和用的。只需要添?lt;security-constraint>?lt;login-config>两个元素C的web应用的web.xml文g中,q且在CATALINA_BASE/conf/tomcat-users.xml 文g中添加适当?lt;role>?lt;user>卛_Q然后重新启动Tomcat?br />


下面例子中的web.xml摘自一个俱乐部会员|站pȝQ该pȝ中只有member目录被保护v来,q用Basic Authenticationq行w䆾验证。请注意Q这U方式将有效的代替Apache web服务器中?htaccess文g?br />


<!--

Define the Members-only area, by defining

a "Security Constraint" on this Application, and

mapping it to the subdirectory (URL) that we want

to restrict.

-->

<security-constraint>

<web-resource-collection>

<web-resource-name>

Entire Application

</web-resource-name>

<url-pattern>/members/*</url-pattern>

</web-resource-collection>

<auth-constraint>

<role-name>member</role-name>

</auth-constraint>

</security-constraint>

<!-- Define the Login Configuration for this Application -->

<login-config>

<auth-method>BASIC</auth-method>

<realm-name>My Club Members-only Area</realm-name>

</login-config>



6Q配|单点登录(Single Sign-OnQ?br />
一旦你讄了realm和验证的ҎQ你需要进行实际的用户d处理。一般说来,对用戯言dpȝ是一件很ȝ的事情,你必d量减用L录验证的ơ数。作为缺省的情况Q当用户W一ơ请求受保护的资源时Q每一个web应用都会要求用户d。如果你q行了多个web应用Qƈ且每个应用都需要进行单独的用户验证Q那q看h有点像你在与你的用h斗。用户们不知道怎样才能把多个分ȝ应用整合成一个单独的pȝQ所有他们也׃知道他们需要访问多个不同的应用,只是很迷惑,Z么总要不停的登录?br />


Tomcat 4的“single sign-on”特性允许用户在讉K同一虚拟L下所有web应用Ӟ只需d一ơ。ؓ了用这个功能,你只需要在Host上添加一个SingleSignOn Valve元素卛_Q如下所C:



<Valve className="org.apache.catalina.authenticator.SingleSignOn"

debug="0"/>



在Tomcat初始安装后,server.xml的注释里面包括SingleSignOn Valve配置的例子,你只需要去掉注释,卛_使用。那么,M用户只要dq一个应用,则对于同一虚拟L下的所有应用同h效?br />


使用single sign-on valve有一些重要的限制Q?br />
1> value必须被配|和嵌套在相同的Host元素里,q且所有需要进行单炚w证的web应用Q必通过context元素定义Q都位于该Host下?br />
2> 包括׃n用户信息的realm必须被设|在同一UHost中或者嵌套之外?br />
3> 不能被context中的realm覆盖?br />
4> 使用单点d的web应用最好用一个Tomcat的内|的验证方式Q被定义在web.xml中的<auth-method>中)Q这比自定义的验证方式强QTomcat内置的的验证方式包括basic、digest、form和client-cert?br />
5> 如果你用单点登录,q希望集成一个第三方的web应用C的网站中来,q且q个新的web应用使用它自q验证方式Q而不使用容器理安全Q那你基本上没招了。你的用hơ登录原来所有应用时需要登录一ơ,q且在请求新的第三方应用时还得再d一ơ。当Ӟ如果你拥有这个第三方web应用的源码,而你又是一个程序员Q你可以修改它,但那恐怕也不容易做?br />
6> 单点d需要用cookies?br />


7Q配|用户定制目录(Customized User DirectoresQ?br />
一些站点允怸别用户在服务器上发布|页。例如,一所大学的学院可能想l每一位学生一个公共区域,或者是一个ISP希望l一些webI间l他的客P但这又不是虚拟主机。在q种情况下,一个典型的Ҏ是在用户名前面加一个特D字W(~Q,作ؓ每位用户的网站,比如Q?br />


http://www.cs.myuniversity.edu/~username

http://members.mybigisp.com/~username



Tomcat提供两种Ҏ在主Z映射q些个h|站Q主要用一对特D的Listener元素。Listener的className属性应该是org.apache.catalina.startup.UserConfigQuserClass属性应该是几个映射cM一。如果你的系l是UnixQ它有一个标准的/etc/passwd文gQ该文g中的帐号能够被运行中的Tomcat很容易的dQ该文g指定了用Lȝ录,使用PasswdUserDatabase 映射cR?br />


<Listener className="org.apache.catalina.startup.UserConfig"

directoryName="public_html"

userClass="org.apache.catalina.startup.PasswdUserDatabase"/>



web文g需要放|在?home/users/ian/public_html 或?/users/jbrittain/public_html一L目录下面。当然你也可以改变public_html 到其他Q何子目录下?br />


实际上,q个用户目录Ҏ不一定需要位于用户主目录下里面。如果你没有一个密码文Ӟ但你又想把一个用户名映射到公q?home一L录的子目录里面,则可以用HomesUserDatabasecR?br />


<Listener className="org.apache.catalina.startup.UserConfig"

directoryName="public_html" homeBase="/home"

userClass="org.apache.catalina.startup.HomesUserDatabase"/>



q样一来,web文g可以位于像/home/ian/public_html 或?/home/jasonb/public_html一L目录下。这UŞ式对Windows而言更加有利Q你可以使用一个像c:homeq样的目录?br />


q些Listener元素Q如果出玎ͼ则必dHost元素里面Q而不能在context元素里面Q因为它们都用应用于Host本n?br />




8Q在Tomcat中用CGI脚本

Tomcat主要是作为Servlet/JSP容器Q但它也有许多传lweb服务器的性能。支持通用|关接口QCommon Gateway InterfaceQ即CGIQ就是其中之一QCGI提供一l方法在响应览器请求时q行一些扩展程序。CGI之所以被UCؓ通用Q是因ؓ它能在大多数E序或脚本中被调用,包括QPerlQPythonQawkQUnix shell scripting{,甚至包括Java。当Ӟ你大概不会把一个Java应用E序当作CGI来运行,毕竟q样太过原始。一般而言Q开发Servlet总要比CGIh更好的效率,因ؓ当用LM个链接或一个按钮时Q你不需要从操作pȝ层开始进行处理?br />


Tomcat包括一个可选的CGI ServletQ允怽q行遗留下来的CGI脚本?br />


Z使Tomcat能够q行CGIQ你必须做如下几件事Q?br />
1. 把servlets-cgi.renametojar Q在CATALINA_HOME/server/lib/目录下)改名为servlets-cgi.jar。处理CGI的servlet应该位于Tomcat的CLASSPATH下?br />
2. 在Tomcat的CATALINA_BASE/conf/web.xml 文g中,把关?lt;servlet-name> CGI的那D늚注释LQ默认情况下Q该D位于第241行)?br />
3. 同样Q在Tomcat的CATALINA_BASE/conf/web.xml文g中,把关于对CGIq行映射的那D늚注释LQ默认情况下Q该D位于第299行)。注意,q段内容指定了HTML链接到CGI脚本的访问方式?br />
4. 你可以把CGI脚本攄在WEB-INF/cgi 目录下(注意QWEB-INF是一个安全的地方Q你可以把一些不惌用户看见或基于安全考虑不想暴露的文件放在此处)Q或者你也可以把CGI脚本攄在context下的其他目录下,qؓCGI Servlet调整cgiPathPrefix初始化参数。这指定的CGI Servlet的实际位|,且不能与上一步指定的URL重名?br />
5. 重新启动TomcatQ你的CGI可以运行了?br />


在Tomcat中,CGIE序~省攄在WEB-INF/cgi目录下,正如前面所提示的那PWEB-INF目录受保护的Q通过客户端的览器无法窥探到其中内容Q所以对于放|含有密码或其他敏感信息的CGI脚本而言Q这是一个非常好的地斏Vؓ了兼容其他服务器Q尽你也可以把CGI脚本保存在传l的/cgi-bin目录Q但要知道,在这些目录中的文件有可能被网上好奇的冲浪者看到。另外,在Unix中,L定运行Tomcat的用h执行CGI脚本的权限?br />


9Q改变Tomcat中的JSP~译器(JSP CompilerQ?br />
在Tomcat 4.1Q或更高版本Q大概)QJSP的编译由包含在Tomcat里面的AntE序控制器直接执行。这听v来有一点点奇怪,但这正是Ant有意Z的一部分Q有一个API文档指导开发者在没有启动一个新的JVM的情况下Q用Ant。这是用Antq行Java开发的一大优ѝ另外,q也意味着你现在能够在Ant中用Q何javac支持的编译方式,q里有一个关于Apache Ant使用手册的javac page列表。用v来是Ҏ的,因ؓ你只需要在<init-param> 元素中定义一个名字叫“compiler”,q且在value中有一个支持编译的~译器名字,CZ如下Q?br />


<servlet>

<servlet-name>jsp</servlet-name>

<servlet-class>

org.apache.jasper.servlet.JspServlet

</servlet-class>

<init-param>

<param-name>logVerbosityLevel</param-name>

<param-value>WARNING</param-value>

</init-param>

<init-param>

<param-name>compiler</param-name>

<param-value>jikes</param-value>

</init-param>

<load-on-startup>3</load-on-startup>

</servlet>



当然Q给出的~译器必dl安装在你的pȝ中,q且CLASSPATH可能需要设|,那处决于你选择的是何种~译器?br />


10Q限制特定主问(Restricting Access to Specific HostsQ?br />
有时Q你可能想限制对Tomcat web应用的访问,比如Q你希望只有你指定的L或IP地址可以讉K你的应用。这样一来,只有那些指定的的客L可以讉K服务的内容了。ؓ了实现这U效果,Tomcat提供了两个参C你配|:RemoteHostValve 和RemoteAddrValve?br />


通过配置q两个参敎ͼ可以让你qo来自h的主机或IP地址Qƈ允许或拒l哪些主?IP。与之类似的Q在Apache的httpd文g里有Ҏ个目录的允许/拒绝指定?br />
例如你可以把Admin Web application讄成只允许本地讉KQ设|如下:



<Context path="/path/to/secret_files" ...>

<Valve className="org.apache.catalina.valves.RemoteAddrValve"

allow="127.0.0.1" deny=""/>

</Context>



如果没有l出允许L的指定,那么与拒l主机匹配的L׃被拒l,除此之外的都是允许的。与之类|如果没有l出拒绝L的指定,那么与允怸机匹配的L׃被允许,除此之外的都是拒l的?br />


--------------------------------------



作者简介:

Jason Brittain是CollabNet公司的一名资pY件工E师Q主要负责Y件底层架构的开发。他已经为Apache Jakarta目做了很多贡献Q多q以来,他一直是一名积极的开源Y件开发者?br />


Ian F. Darwin已经在计机行业工作?0q_?980q开始用UnixQ从1995q开始用JavaQ从1998q开始用OpenBSD。他是两本Oreilly图书的作者:Checking C Programs with lint ?Java CookbookQ还与Jason Brittain合著了Tomcat: The Definitive Guide?br />


译者简介:

陈光QHolen ChenQ,J2EE目l理Q熟悉知识管理及电子政务Q致力于Apache Jakarta目在国q的推广及深层次应用Q可通过 holen@263.net与作者联pR?br />



javaGrowing 2006-05-15 10:00 发表评论
]]>
Tomcat参数说明 http://m.tkk7.com/juhongtao/archive/2006/05/13/45965.htmljavaGrowingjavaGrowingSat, 13 May 2006 04:52:00 GMThttp://m.tkk7.com/juhongtao/archive/2006/05/13/45965.htmlhttp://m.tkk7.com/juhongtao/comments/45965.htmlhttp://m.tkk7.com/juhongtao/archive/2006/05/13/45965.html#Feedback0http://m.tkk7.com/juhongtao/comments/commentRss/45965.htmlhttp://m.tkk7.com/juhongtao/services/trackbacks/45965.html下面我们讲q这个文件中的基本配|信息,更具体的配置信息见tomcat的文档?br />server: port    指定一个端口,q个端口负责监听关闭tomcat的请?br />shutdown    指定向端口发送的命o字符?br />service: name    指定service的名?br />Connector    (表示客户端和service之间的连?:
port    指定服务器端要创建的端口Pq在q个断口监听来自客户端的h
minProcessors    服务器启动时创徏的处理请求的U程?br />maxProcessors    最大可以创建的处理h的线E数
enableLookups    如果为trueQ则可以通过调用request.getRemoteHost()q行DNS查询来得到远E客L的实际主机名Q若为false则不q行DNS查询Q而是q回其ip地址
redirectPort    指定服务器正在处理httph时收C一个SSL传输h后重定向的端口号
acceptCount    指定当所有可以用的处理h的线E数都被使用Ӟ可以攑ֈ处理队列中的h敎ͼ过q个数的h不予处?br />connectionTimeout    指定时的时间数(以毫Uؓ单位)
Engine    (表示指定service中的h处理机,接收和处理来自Connector的请?:
defaultHost    指定~省的处理请求的L名,它至与其中的一个host元素的name属性值是一L
Context    (表示一个web应用E序Q通常为WAR文gQ关于WAR的具体信息见servlet规范):
docBase    应用E序的\径或者是WAR文g存放的\?br />path    表示此web应用E序的url的前~Q这栯求的url?a href="http://localhost:8080/path/****" target="_blank">http://localhost:8080/path/****
reloadable    q个属性非帔R要,如果为trueQ则tomcat会自动检应用程序的/WEB-INF/lib?WEB-INF/classes目录的变化,自动装蝲新的应用E序Q我们可以在不重起tomcat的情况下改变应用E序
host    (表示一个虚拟主?:
name    指定L?br />appBase    应用E序基本目录Q即存放应用E序的目?br />unpackWARs    如果为trueQ则tomcat会自动将WAR文g解压Q否则不解压Q直接从WAR文g中运行应用程?br />Logger    (表示日志Q调试和错误信息):
className    指定logger使用的类名,此类必须实现
org.apache.catalina.Logger    接口
prefix    指定log文g的前~
suffix    指定log文g的后~
timestamp    如果为trueQ则log文g名中要加入时_如下?localhost_log.2001-10-04.txt
Realm    (表示存放用户名,密码及role的数据库):
className    指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口
Valve    (功能与Logger差不多,其prefix和suffix属性解释和Logger中的一?:
className    指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValvecd以记录应用程序的讉K信息
directory    指定log文g存放的位|?br />pattern    有两个|common方式记录q程L名或ip地址Q用户名Q日期,W一行请求的字符ԌHTTP响应代码Q发送的字节数。combined方式比common方式记录的值更?br />注意Q?br />1Q经q我试Q我讄Context 的path="",reloadable=trueQ然后放一个WAR文g到webapps目录Q结果tomcat不能出此文?重vtomcat可以)Q而把此文件解压,则tomcat会自动检出q个新的应用E序。如果不能自动检WAR文gQ我们可以利用下面管理中讲的Ҏ来部|应用程序。?br />2Q默认的server.xml中,Realm元素只设|了一个className属性,但此文g中也包含几个通过JDBCq接到数据库q行验证的示?被注释掉?Q通过Realm元素我们可以实现容器安全理(Container Managed Security)。?br />3Q还有一些元素我们没有介l,如ParameterQloaderQ你可以通过tomcat的文档获取这些元素的信息。?br />


javaGrowing 2006-05-13 12:52 发表评论
]]>
tomcat中的几点配置说明http://m.tkk7.com/juhongtao/archive/2006/05/13/45964.htmljavaGrowingjavaGrowingSat, 13 May 2006 04:49:00 GMThttp://m.tkk7.com/juhongtao/archive/2006/05/13/45964.htmlhttp://m.tkk7.com/juhongtao/comments/45964.htmlhttp://m.tkk7.com/juhongtao/archive/2006/05/13/45964.html#Feedback0http://m.tkk7.com/juhongtao/comments/commentRss/45964.htmlhttp://m.tkk7.com/juhongtao/services/trackbacks/45964.html在tomcat配置文gserver.xml中的<Connector ... />配置中,和连接数相关的参数有Q?br />minProcessorsQ最空闲连接线E数Q用于提高系l处理性能Q默认gؓ10
maxProcessorsQ最大连接线E数Q即Qƈ发处理的最大请求数Q默认gؓ75
acceptCountQ允许的最大连接数Q应大于{于maxProcessorsQ默认gؓ100
enableLookupsQ是否反查域名,取gؓQtrue或false。ؓ了提高处理能力,应设|ؓfalse
connectionTimeoutQ网l连接超Ӟ单位Q毫U。设|ؓ0表示怸时Q这栯|有隐患的。通常可设|ؓ30000毫秒?/p>

其中和最大连接数相关的参CؓmaxProcessors和acceptCount。如果要加大q发q接敎ͼ应同时加大这两个参数?/p>


web server允许的最大连接数q受制于操作pȝ的内核参数设|,通常Windows?000个左叻ILinux?000个左叟뀂Unix中如何设|这些参敎ͼ请参阅Unix常用监控和管理命?

tomcat4中的配置CZQ?br /><Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="10" maxProcessors="1024"
enableLookups="false" redirectPort="8443"
acceptCount="1024" debug="0" connectionTimeout="30000" />

对于其他端口的侦听配|,以此cL?/p>

2. tomcat中如何禁止列目录下的文g
?conf/web.xml中,把listings参数讄成false卛_Q如下:
<servlet>
...
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
...
</servlet>

3. 如何加大tomcat可以使用的内?/p>

tomcat默认可以使用的内存ؓ64MBQ在较大型的应用目中,q点内存是不够的Q需要调大?/p>

Unix下,在文?bin/catalina.sh的前面,增加如下讄Q?br />JAVA_OPTS='-Xms【初始化内存大小?-Xmx【可以用的最大内存?
需要把q个两个参数D大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存ؓ256MBQ可以用的最大内存ؓ512MB

4. 如何d默认讉K面
修改文gweb.xmlQ在welcome-list里面dindex.wml作ؓ默认的访问页?br /><welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>



javaGrowing 2006-05-13 12:49 发表评论
]]>
Tomcat讄cMIIS的访问密?/title><link>http://m.tkk7.com/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://m.tkk7.com/juhongtao/archive/2006/05/13/45963.html</guid><wfw:comment>http://m.tkk7.com/juhongtao/comments/45963.html</wfw:comment><comments>http://m.tkk7.com/juhongtao/archive/2006/05/13/45963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/juhongtao/comments/commentRss/45963.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/juhongtao/services/trackbacks/45963.html</trackback:ping><description><![CDATA[ <p>例如你要控制对ROOT目录下文件的讉KQ首先更?TOMCAT_HOME/ROOT/WEB-INF/web.xml </p> <p>  1.?lt;web-app>?lt;/web-app>之间加入 <br /><br />  <security-constraint> <br />  <web-resource-collection> <br />  <web-resource-name>Entire Application</web-resource-name> <br />  <url-pattern>/*</url-pattern> <br />  </web-resource-collection> <br />  <auth-constraint> <br />  <!-- NOTE: This role is not present in the default users file --> <br />  <role-name>user</role-name> <br />  </auth-constraint> <br />  </security-constraint> <br /><br />  <!-- Define the Login Configuration for this Application --> <br />  <login-config> <br />  <auth-method>BASIC</auth-method> <br />  <realm-name>TEST ACCESS CONTROL</realm-name> <br />  </login-config> <br /><br />  2.然后?TOMCAT_HOME/conf/tomcat-users.xml中加?<br />  <br />  <user name="user" password="password" roles="user"/> <br />  roles的名字和web.xml中的相对?<br /><br />  在TOMCAT4.03中测试通过  </p> <img src ="http://m.tkk7.com/juhongtao/aggbug/45963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/juhongtao/" target="_blank">javaGrowing</a> 2006-05-13 12:29 <a href="http://m.tkk7.com/juhongtao/archive/2006/05/13/45963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何增大以Windows服务方式q行的Tomcat的可用内? http://m.tkk7.com/juhongtao/archive/2006/05/13/45959.htmljavaGrowingjavaGrowingSat, 13 May 2006 03:58:00 GMThttp://m.tkk7.com/juhongtao/archive/2006/05/13/45959.htmlhttp://m.tkk7.com/juhongtao/comments/45959.htmlhttp://m.tkk7.com/juhongtao/archive/2006/05/13/45959.html#Feedback0http://m.tkk7.com/juhongtao/comments/commentRss/45959.htmlhttp://m.tkk7.com/juhongtao/services/trackbacks/45959.html首先安装tomcat时候最好选择zip打包方式直接解压到某个目录!

打开{tomat}/bin/service.batQ找到如下一?/p>

"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp" --JvmMs 128 --JvmMx 256

知道怎么做了嘛??28?56替换成你惌的|例如初始内存256Q最大内?12。第一个数值是初始内存大小Q单位是兆,W二个数值是最大内存!

修改完保存该文g后执行如下命令来安装服务

service install {service_name}

{service_name}替换成你?



javaGrowing 2006-05-13 11:58 发表评论
]]>
Tomcat之配|多个虚拟主机指向同一个应? http://m.tkk7.com/juhongtao/archive/2006/05/13/45955.htmljavaGrowingjavaGrowingSat, 13 May 2006 03:53:00 GMThttp://m.tkk7.com/juhongtao/archive/2006/05/13/45955.htmlhttp://m.tkk7.com/juhongtao/comments/45955.htmlhttp://m.tkk7.com/juhongtao/archive/2006/05/13/45955.html#Feedback0http://m.tkk7.com/juhongtao/comments/commentRss/45955.htmlhttp://m.tkk7.com/juhongtao/services/trackbacks/45955.html当我们需要将多个域名同时指向同一个应用,而且要求不能跟Tomcat默认的应用冲H时怎么办? 今天 红?/a> 问vq个问题Q顺便研I了一下,可以通过下面配置来实?/p>

<Host name="javayou.com" appBase="webapps"
       unpackWARs="true" autoDeploy="false"
       xmlValidation="false" xmlNamespaceAware="false">
       <Alias>www.javayou.com</Alias>
       <Alias>wap.javayou.com</Alias>
       <Context path="" docBase="C:\PROJECTS\JAVA\DLOG4J_V3\webapp" reloadable="true"/>
</Host>

上面的例子把三个域名分别?javayou.com, www.javayou.com, wap.javayou.com 都指Cdlogq个应用?/p>

当然了,如果你的Tomcat只跑一个应用那׃用那么费劲了Q把name讄为localhost搞定了Q别说是三个域名了,三万个也没问题啊?/p>

javaGrowing 2006-05-13 11:53 发表评论
]]>
Tomcat中设|远EdebugҎhttp://m.tkk7.com/juhongtao/archive/2006/05/11/45596.htmljavaGrowingjavaGrowingThu, 11 May 2006 01:36:00 GMThttp://m.tkk7.com/juhongtao/archive/2006/05/11/45596.htmlhttp://m.tkk7.com/juhongtao/comments/45596.htmlhttp://m.tkk7.com/juhongtao/archive/2006/05/11/45596.html#Feedback0http://m.tkk7.com/juhongtao/comments/commentRss/45596.htmlhttp://m.tkk7.com/juhongtao/services/trackbacks/45596.html
何ؓq程调试Q我们一般调试一个web目的java代码Ӟ需要将你的tomcat服务器和你的开发工P比如JbuilderQ集成,或需要工L一些插件支?比如Eclipse下的myclipse{?Q这些方式都是在本地q行Q即你的开发工具和tomcatq行在同一台服务器上,如果你的开发工具和服务器不再一台机器上那就需要实现远E调试功能了?br />
实现ҎQ?br />在tomcat的catalina.bat文g中加入下面的讄Q当然SET CATALINA_OPTS 变量应该在用它之前。这是在tomcat启动时设|一些虚拟机参数Q服务器允许远E连接功能,address=5888表示q程q接的端口号Q可以设|成L其他不冲H端口。其他的应用服务器比如weblogic也应该可以设|这些参敎ͼ有兴的可以试?br />
SET CATALINA_OPTS = -server -Xdebug -Xnoagent -Djava.compiler = NONE -Xrunjdwp:transport = dt_socket , server = y , suspend = n , address = 5888  

q样Ok了,重启动tomcat,可以直接独立启动Q而不用在eclipes的插件中启动。打开eclipse中的debug讄H口Q选择Remote Java Application Q新Z个debug,输入服务器IP和刚才设|端口号Q点ok可以进入debug状态了。Jbuilder中同样可以设|Remote Java Application?/div>
 
 
另有Javaeyes论坛的一片文章如?/div>
 
ibm论坛的原始文章如?/div>
http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/但是该文章没有说明如何设|tomcat使其启动后支持远E调试连接?/div>
 
用以参考~
 
<jvmarg value="-Xdebug"/>
<jvmarg value="-Xnoagent"/>
<jvmarg value="-Djava.compiler=none"/>
<jvmarg value-Xrunjdwp:transport=dt_socket,server=y,address=4000,suspend=n"/>

 
另外Qversion 4.1.29Q:
我手工将catalina.bat?/div>
set JPDA=
修改?/div>
set JPDA=jpda
set JPDA_TRANSPORT=dt_socket
set JPDA_ADDRESS=XXXX
然后在eclipse里面创徏一个remote java application Q将port讄为XXXX的|也可?/div>
因ؓ调试的启用,无非讄transport属性允许远E连接ƈ且指定一个端口号而已Q指定之后在eclipse里面对应的配|该端口号即可?/div>

javaGrowing 2006-05-11 09:36 发表评论
]]> վ֩ģ壺 ˸Ƶ| һ˿hdƵ| ޵Ӱѹۿ| պߵӰ| ٸƷһѶ̬ | ѵӰվ| ŷղۺ| Ƶ߹ۿ| ޾ƷƵ| ÿƬѵƵ| ɫվ߹ۿ| ߹ۿav| ɫרһ| ƷɫҹƵѿ| ŮƵѿһ| պ޵һҳ| һƬaѲſ| ҹƷһ| 999þþѾƷ| ɫ͵͵͵ۺ| Ļ| þŮƵ| avþDz| www.޾Ʒ| һaȫƵ| 91Ʒ鶹ϵ| պƵѹۿ| ww߹Ƶѹۿw| һӰ| ȾþþƷƵ| Ʒϵ߹ۿ | ߹ۿƵվ| һһˬһ߽дƵ| ޸ľƷ26U| һAV| һaƬþëƬѿ| ޹ŮaaaëƬ| ĻӰӴȫ| йһëƬƵѿ| ޷Ůһv| ޾ƷWWWþþþþ |