<!--?Example?Server?Configuration?File?-->
<!--?Tomcat
服務(wù)器配置示例文件?-->
<!--?Note?that?component?elements?are?nested?corresponding?to?their
?????parent-child?relationships?with?each?other?-->
<!--?注意,這些組件的構(gòu)成是根據(jù)相互之間的父子關(guān)系進(jìn)行嵌套的。-->
<!--?A?"Server"?is?a?singleton?element?that?represents?the?entire?JVM,
?????which?may?contain?one?or?more?"Service"?instances.?The?Server
?????listens?for?a?shutdown?command?on?the?indicated?port.
?????Note:?A?"Server"?is?not?itself?a?"Container",?so?you?may?not
?????define?subcomponents?such?as?"Valves"?or?"Loggers"?at?this?level.
?-->
<!--?一個“Server”是一個提供完整的JVM的獨立組件,它可以包含一個或多個
?????“Service”實例。
服務(wù)器在指定的端口上監(jiān)聽shutdown命令。
?????
?????注意:一個“Server”自身不是一個“Container”(容器),因此在這里你
?????不可以定義諸如“Valves”或者“Loggers”子組件
-->
<Server?port="8005"?shutdown="SHUTDOWN"?debug="0">
??<!--?Comment?these?entries?out?to?disable?JMX?MBeans?support?-->
??<!--?這些指令組件關(guān)閉JMX?MBeans支持?-->
??
??<!--?You?may?also?configure?custom?components?(e.g.?Valves/Realms)?by?
???????including?your?own?mbean-descriptor?file(s),?and?setting?the?
???????"descriptors"?attribute?to?point?to?a?';'?seperated?list?of?paths
???????(in?the?ClassLoader?sense)?of?files?to?add?to?the?default?list.
???????e.g.?descriptors="/com/myfirm/mypackage/mbean-descriptor.xml"
??-->
??<!--?你也可以通過包含你自己的mbean描述文件配置自定義的組件,然后設(shè)置
???????“descriptors”屬性為以“;”為分隔的文件名列表嚴(yán)將它添加到默認(rèn)列表
???????中,例如:descriptors="/com/myfirm/mypackage/mbean-descriptor.xml"。
?-->
???????
??<Listener?className="org.apache.catalina.mbeans.ServerLifecycleListener"
????????????debug="0"/>
??<Listener?className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
????????????debug="0"/>
??<!--?Global?JNDI?resources?-->
??<!--?全局JNDI資源?-->
??<GlobalNamingResources>
????<!--?Test?entry?for?demonstration?purposes?-->
????<!--?出于示例目的的測試入口?-->
????<Environment?name="simpleValue"?type="java.lang.Integer"?value="30"/>
????<!--?Editable?user?database?that?can?also?be?used?by
?????????UserDatabaseRealm?to?authenticate?users?-->
????<!--?可編輯的,用來通過UserDatabaseRealm認(rèn)證用戶的用戶數(shù)據(jù)庫?-->
????
????<Resource?name="UserDatabase"?auth="Container"
??????????????type="org.apache.catalina.UserDatabase"
???????description="User?database?that?can?be?updated?and?saved">
????</Resource>
????<ResourceParams?name="UserDatabase">
??????<parameter>
????????<name>factory</name>
????????<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
??????</parameter>
??????<parameter>
????????<name>pathname</name>
????????<value>conf/tomcat-users.xml</value>
??????</parameter>
????</ResourceParams>
??</GlobalNamingResources>
??<!--?A?"Service"?is?a?collection?of?one?or?more?"Connectors"?that?share
???????a?single?"Container"?(and?therefore?the?web?applications?visible
???????within?that?Container).?Normally,?that?Container?is?an?"Engine",
???????but?this?is?not?required.
???????Note:?A?"Service"?is?not?itself?a?"Container",?so?you?may?not
???????define?subcomponents?such?as?"Valves"?or?"Loggers"?at?this?level.
???-->
??<!--?一個“Service”是一個或多個共用一個單獨“Container”(容器)的“Connectors”
???????組合(因此,應(yīng)用程序在容器中可見)。通常,這個容器是一個“Engine”
???????(引擎),但這不是必須的。
???????
???????注意:一個“Service”自身不是一個容器,因此,在這個級別上你不可定義
???????諸如“Valves”或“Loggers”子組件。
??-->
??<!--?Define?the?Tomcat?Stand-Alone?Service?-->
??<!--?定義Tomcat的標(biāo)準(zhǔn)獨立服務(wù)?-->
??<Service?name="Catalina">
????<!--?A?"Connector"?represents?an?endpoint?by?which?requests?are?received
?????????and?responses?are?returned.?Each?Connector?passes?requests?on?to?the
?????????associated?"Container"?(normally?an?Engine)?for?processing.
?????????By?default,?a?non-SSL?HTTP/1.1?Connector?is?established?on?port?8080.
?????????You?can?also?enable?an?SSL?HTTP/1.1?Connector?on?port?8443?by
?????????following?the?instructions?below?and?uncommenting?the?second?Connector
?????????entry.?SSL?support?requires?the?following?steps?(see?the?SSL?Config
?????????HOWTO?in?the?Tomcat?5?documentation?bundle?for?more?detailed
?????????instructions):
?????????*?If?your?JDK?version?1.3?or?prior,?download?and?install?JSSE?1.0.2?or
???????????later,?and?put?the?JAR?files?into?"$JAVA_HOME/jre/lib/ext".
?????????*?Execute:
?????????????%JAVA_HOME%\bin\keytool?-genkey?-alias?tomcat?-keyalg?RSA?(Windows)
?????????????$JAVA_HOME/bin/keytool?-genkey?-alias?tomcat?-keyalg?RSA?(Unix)
???????????with?a?password?value?of?"changeit"?for?both?the?certificate?and
???????????the?keystore?itself.
?????????By?default,?DNS?lookups?are?enabled?when?a?web?application?calls
?????????request.getRemoteHost().?This?can?have?an?adverse?impact?on
?????????performance,?so?you?can?disable?it?by?setting?the
?????????"enableLookups"?attribute?to?"false".?When?DNS?lookups?are?disabled,
?????????request.getRemoteHost()?will?return?the?String?version?of?the
?????????IP?address?of?the?remote?client.
????-->
????<!--?一個“Connector”(連接器)代表一個請求被接收和應(yīng)答所需要的端點。每個連
?????????接器通過相關(guān)的“Container”(容器)處理請求。
?????????
?????????默認(rèn)情況下,一個非SSL的HTTP/1.1的連接器被綁定在端口8080。你也可以通過
?????????根據(jù)后面的使用說明并取消第二個連接器入口的注釋,在端口8443上建立一個
?????????SSL?HTTP/1.1的連接器。開放SSL支持需要下面幾步(參見Tomcat?5文檔中怎樣
?????????配置SSL的說明以取得更多的詳細(xì)信息):
?????????*?如果你的JDK是1.3或1.3以前的版本,下載安裝JSSE?1.0.2或以后版本,并放
???????????置JAR文件到“$JAVA_HOME/jre/lib/ext”目錄下。
?????????*?帶一個“changeit”的口令值執(zhí)行:
?????????????%JAVA_HOME%\bin\keytool?-genkey?-alias?tomcat?-keyalg?RSA?(Windows)
?????????????$JAVA_HOME/bin/keytool?-genkey?-alias?tomcat?-keyalg?RSA?(UNIX)
???????????來生成它自己的證書私鑰。
???????????
?????????默認(rèn)情況下,當(dāng)一個web應(yīng)用程序調(diào)用請求時,DNS查詢是可行的。這將對性能造
?????????成一些不利的影響,因此,你可以將“enableLookups”設(shè)置為“false”來關(guān)閉DNS
?????????查詢。當(dāng)DNS查詢被關(guān)閉時,request.getRemoteHost()將返回包含遠(yuǎn)程客戶IP地
?????????址的字符串。
??-->
????<!--?Define?a?non-SSL?Coyote?HTTP/1.1?Connector?on?port?8080?-->
????<!--?在8080端口上定義一個非SSL的HTTP/1.1連接器?-->
????<Connector?port="8080"
???????????????maxThreads="150"?minSpareThreads="25"?maxSpareThreads="75"
???????????????enableLookups="false"?redirectPort="8443"?acceptCount="100"
???????????????debug="0"?connectionTimeout="20000"?
???????????????disableUploadTimeout="true"?/>
????<!--?Note?:?To?disable?connection?timeouts,?set?connectionTimeout?value
?????to?0?-->
????<!--?注意,要關(guān)閉連接超時,將connectionTimeout設(shè)置為0?-->
<!--?Note?:?To?use?gzip?compression?you?could?set?the?following?properties?:
compression="on"?
compressionMinSize="2048"?
noCompressionUserAgents="gozilla,?traviata"?
compressableMimeType="text/html,text/xml"
-->
<!--?注意:要使用gzip壓縮需要設(shè)置如下屬性:
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml"
-->
????<!--?Define?a?SSL?Coyote?HTTP/1.1?Connector?on?port?8443?-->
????<!--?在端口8443上定義一個SSL的HTTP/1.1的連接器?-->
????<!--
????<Connector?port="8443"?
???????????????maxThreads="150"?minSpareThreads="25"?maxSpareThreads="75"
???????????????enableLookups="false"?disableUploadTimeout="true"
???????????????acceptCount="100"?debug="0"?scheme="https"?secure="true"
???????????????clientAuth="false"?sslProtocol="TLS"?/>
????-->
????<!--?Define?a?Coyote/JK2?AJP?1.3?Connector?on?port?8009?-->
????<!--?在端口8009上定義一個Coyote/JK2?AJP?1.3連接器?-->
????<Connector?port="8009"?
???????????????enableLookups="false"?redirectPort="8443"?debug="0"
???????????????protocol="AJP/1.3"?/>
????<!--?Define?a?Proxied?HTTP/1.1?Connector?on?port?8082?-->
????<!--?在8082端口上定義一個代理HTTP/1.1連接器?-->
????<!--?See?proxy?documentation?for?more?information?about?using?this.?-->
????<!--?參見代理文檔以取得這里使用屬性的更多的信息。?-->
????<!--
????<Connector?port="8082"?
???????????????maxThreads="150"?minSpareThreads="25"?maxSpareThreads="75"
???????????????enableLookups="false"
???????????????acceptCount="100"?debug="0"?connectionTimeout="20000"
???????????????proxyPort="80"?disableUploadTimeout="true"?/>
????-->
????<!--?An?Engine?represents?the?entry?point?(within?Catalina)?that?processes
?????????every?request.?The?Engine?implementation?for?Tomcat?stand?alone
?????????analyzes?the?HTTP?headers?included?with?the?request,?and?passes?them
?????????on?to?the?appropriate?Host?(virtual?host).?-->
????<!--?一個“Engine”(引擎)代表處理每個請求的入口點(在Catalina內(nèi))。這個Tomcat
?????????的標(biāo)準(zhǔn)獨立引擎實現(xiàn)分析包含在請求中的HTTP頭信息,并將請求傳送到適當(dāng)?shù)闹鳈C(jī)
?????????或虛擬主機(jī)上。-->
????<!--?You?should?set?jvmRoute?to?support?load-balancing?via?JK/JK2?ie?:
????<Engine?name="Standalone"?defaultHost="localhost"?debug="0"?jvmRoute="jvm1">?
????-->?
????<!--?你應(yīng)該這樣設(shè)置jvmRoute以便在JK/JK2通道上支持負(fù)載平衡:
????<Engine?name="Standalone"?defaultHost="localhost"?debug="0"?jvmRoute="jvm1">
????-->
?????????
????<!--?Define?the?top?level?container?in?our?container?hierarchy?-->
????<!--?在我們的容器體系中定義最高級別的容器?-->
????<Engine?name="Catalina"?defaultHost="localhost"?debug="0">
??????<!--?The?request?dumper?valve?dumps?useful?debugging?information?about
???????????the?request?headers?and?cookies?that?were?received,?and?the?response
???????????headers?and?cookies?that?were?sent,?for?all?requests?received?by
???????????this?instance?of?Tomcat.?If?you?care?only?about?requests?to?a
???????????particular?virtual?host,?or?a?particular?application,?nest?this
???????????element?inside?the?corresponding?<Host>?or?<Context>?entry?instead.
???????????For?a?similar?mechanism?that?is?portable?to?all?Servlet?2.4
???????????containers,?check?out?the?"RequestDumperFilter"?Filter?in?the
???????????example?application?(the?source?for?this?filter?may?be?found?in
???????????"$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters").
???????????Request?dumping?is?disabled?by?default.?Uncomment?the?following
???????????element?to?enable?it.?-->
??????<!--?請求轉(zhuǎn)儲器值轉(zhuǎn)儲非常有用的通過Tomcat這個實例接收到的所有請求的,關(guān)于
???????????接收到的請求頭和cookies,以及發(fā)送出的回應(yīng)頭和cookies的調(diào)試信息。如果
???????????你只在意一個特定的虛擬主機(jī)或者一個特定應(yīng)用程序的請求,在對應(yīng)的<Host>
???????????或<Context>入口中套用這個元素。
???????????
???????????對于所有的Servlet(小服務(wù)程序)2.4來所,在示例程序中檢驗
???????????“RequestDumperFilter”過濾是非常容易的(這個過濾器源代碼可以在
???????????“$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters”下找到。
???????????
???????????請求轉(zhuǎn)儲默認(rèn)情況下是關(guān)閉的,如果要使用它,取消下面行的注釋符。-->
??????<!--
??????<Valve?className="org.apache.catalina.valves.RequestDumperValve"/>
??????-->
??????<!--?Global?logger?unless?overridden?at?lower?levels?-->
??????<!--?全局日志設(shè)置,除非在更低的級別上覆蓋它的設(shè)置?-->
??????<Logger?className="org.apache.catalina.logger.FileLogger"
??????????????prefix="catalina_log."?suffix=".txt"
??????????????timestamp="true"/>
??????<!--?Because?this?Realm?is?here,?an?instance?will?be?shared?globally?-->
??????<!--?因為這個Realm(區(qū)域)在這兒,因此這個實例將被全局共享。?-->
??????<!--?This?Realm?uses?the?UserDatabase?configured?in?the?global?JNDI
???????????resources?under?the?key?"UserDatabase".?Any?edits
???????????that?are?performed?against?this?UserDatabase?are?immediately
???????????available?for?use?by?the?Realm.?-->
??????<!--?這個Realm(區(qū)域)使用在全局JNDI資源下,由“UserDatabase”配置的用戶
???????????數(shù)據(jù)庫。通過使用Realm將使對于這個用戶數(shù)據(jù)庫的任何編輯都將會立即可用
??????<Realm?className="org.apache.catalina.realm.UserDatabaseRealm"
?????????????????debug="0"?resourceName="UserDatabase"/>
??????<!--?Comment?out?the?old?realm?but?leave?here?for?now?in?case?we
???????????need?to?go?back?quickly?-->
??????<!--?注釋掉舊有的Realm以便我們能很快速的恢復(fù)舊有配置。?-->
??????<!--
??????<Realm?className="org.apache.catalina.realm.MemoryRealm"?/>
??????-->
??????<!--?Replace?the?above?Realm?with?one?of?the?following?to?get?a?Realm
???????????stored?in?a?database?and?accessed?via?JDBC?-->
??????<!--?下面的屬性用于從儲存在數(shù)據(jù)庫或從JDBC通道中得到的Realm以取代上面的
???????????Realm配置。-->
??????<!--
??????<Realm?className="org.apache.catalina.realm.JDBCRealm"?debug="99"
?????????????driverName="org.gjt.mm.mysql.Driver"
??????????connectionURL="jdbc:mysql://localhost/authority"
?????????connectionName="test"?connectionPassword="test"
??????????????userTable="users"?userNameCol="user_name"?userCredCol="user_pass"
??????????userRoleTable="user_roles"?roleNameCol="role_name"?/>
??????-->
??????<!--
??????<Realm?className="org.apache.catalina.realm.JDBCRealm"?debug="99"
?????????????driverName="oracle.jdbc.driver.
OracleDriver"
??????????connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"
?????????connectionName="scott"?connectionPassword="tiger"
??????????????userTable="users"?userNameCol="user_name"?userCredCol="user_pass"
??????????userRoleTable="user_roles"?roleNameCol="role_name"?/>
??????-->
??????<!--
??????<Realm?className="org.apache.catalina.realm.JDBCRealm"?debug="99"
?????????????driverName="sun.jdbc.odbc.JdbcOdbcDriver"
??????????connectionURL="jdbc:odbc:CATALINA"
??????????????userTable="users"?userNameCol="user_name"?userCredCol="user_pass"
??????????userRoleTable="user_roles"?roleNameCol="role_name"?/>
??????-->
??????<!--?Define?the?default?virtual?host
???????????Note:?XML?Schema?validation?will?not?work?with?Xerces?2.2.
???????-->
??????<!--?定義默認(rèn)的虛擬主機(jī)
???????????注意:XML模式確認(rèn)將不能與Xerces?2.2同工作。
??????-->
??????<Host?name="localhost"?debug="0"?appBase="webapps"
???????unpackWARs="true"?autoDeploy="true"
???????xmlValidation="false"?xmlNamespaceAware="false">
????????<!--?Defines?a?cluster?for?this?node,
?????????????By?defining?this?element,?means?that?every?manager?will?be?changed.
?????????????So?when?running?a?cluster,?only?make?sure?that?you?have?webapps?in?there
?????????????that?need?to?be?clustered?and?remove?the?other?ones.
?????????????A?cluster?has?the?following?parameters:
?????????????為這個結(jié)點定義一個群集,通過定義這個元素,意味著每個管理員都將被改變。
?????????????因此,當(dāng)運行一個群集時,只有確認(rèn)在必須被聚集和移除其他的地方有你的
?????????????web軟件。
?????????????一個群集有下面這些參數(shù):
?????????????className?=?the?fully?qualified?name?of?the?cluster?class
?????????????className?=?這個群集類的全限定名
?????????????name?=?a?descriptive?name?for?your?cluster,?can?be?anything
?????????????name?=?你的群集的描述名,可以是任何描述
?????????????debug?=?the?debug?level,?higher?means?more?output
?????????????debug?=?調(diào)試級別,更高意味著更多的輸出
?????????????mcastAddr?=?the?multicast?address,?has?to?be?the?same?for?all?the?nodes
?????????????mcastAddr?=?多播地址,所有的節(jié)點都必須有同樣的多播地址
?????????????mcastPort?=?the?multicast?port,?has?to?be?the?same?for?all?the?nodes
?????????????mcastPort?=?多播端口,對所有的節(jié)點都必須有同樣的多播端口
?????????????
?????????????mcastBindAddr?=?bind?the?multicast?socket?to?a?specific?address
?????????????mcastBindAddr?=?綁定多播套接字到一個指定的地址
?????????????
?????????????mcastTTL?=?the?multicast?TTL?if?you?want?to?limit?your?broadcast
?????????????mcastTTL?=?多播生存期,如果你想要限制你的廣播的話
?????????????
?????????????mcastSoTimeout?=?the?multicast?readtimeout
?????????????mcastSoTimeout?=?多播讀取超時
?????????????mcastFrequency?=?the?number?of?milliseconds?in?between?sending?a?"I'm?alive"?heartbeat
?????????????mcastFrequency?=?發(fā)送“I'm?alive”(我還活著)信息的間隔毫秒數(shù)
?????????????mcastDropTime?=?the?number?a?milliseconds?before?a?node?is?considered?"dead"?if?no?heartbeat?is?received
?????????????mcastDropTime?=?多長時間沒有收到“I'm?alive”就將這個節(jié)點標(biāo)識為死節(jié)點(單位:毫秒)
?????????????tcpThreadCount?=?the?number?of?threads?to?handle?incoming?replication?requests,?optimal?would?be?the?same?amount?of?threads?as?nodes?
?????????????tcpThreadCount?=?用于處理重復(fù)引入請求的線程數(shù),最好是每個節(jié)點都有相同的線程數(shù)
?????????????tcpListenAddress?=?the?listen?address?(bind?address)?for?TCP?cluster?request?on?this?host,?
????????????????????????????????in?case?of?multiple?ethernet?cards.
????????????????????????????????auto?means?that?address?becomes
????????????????????????????????InetAddress.getLocalHost().getHostAddress()
?????????????tcpListenAddress?=?在有多塊以太
網(wǎng)卡的主機(jī)上的監(jiān)聽TCP群集請求的地址(綁定地址),
????????????????????????????????auto意味著地址由InetAddress.getLocalHost().getHostAddress()取得。
?????????????tcpListenPort?=?the?tcp?listen?port
?????????????tcpListenPort?=?tcp監(jiān)聽端口
?????????????tcpSelectorTimeout?=?the?timeout?(ms)?for?the?Selector.select()?method?in?case?the?OS
??????????????????????????????????has?a?wakup?bug?in?java.nio.?Set?to?0?for?no?timeout
?????????????tcpSelectorTimeout?=?在
操作系統(tǒng)中有java.nio喚醒錯的情況下,使用Selector.select()的超時
??????????????????????????????????毫秒數(shù)。設(shè)為0則沒有超時限制
?????????????printToScreen?=?true?means?that?managers?will?also?print?to?std.out
?????????????printToScreen?=?true意味著管理員的相關(guān)信息也將打印輸出到std.out
?????????????expireSessionsOnShutdown?=?true?means?that
?????????????expireSessionsOnShutdown?=?true?意味著?????
?????????????useDirtyFlag?=?true?means?that?we?only?replicate?a?session?after?setAttribute,removeAttribute?has?been?called.
????????????????????????????false?means?to?replicate?the?session?after?each?request.
????????????????????????????false?means?that?replication?would?work?for?the?following?piece?of?code:
????????????????????????????<%
????????????????????????????HashMap?map?=?(HashMap)session.getAttribute("map");
????????????????????????????map.put("key","value");
????????????????????????????%>
?????????????useDirtyFlag?=?true意味著我們只能在調(diào)用setAttribute,removeAttribute后才能復(fù)制一個會話;
????????????????????????????false意味著在每個請求后復(fù)制會話。
????????????????????????????false意味著復(fù)制將以下列代碼方式工作:
????????????????????????????<%
????????????????????????????HashMap?map?=?(HashMap)session.getAttribute("map");
????????????????????????????map.put("key","value");
????????????????????????????%>
????????????????????????????
?????????????replicationMode?=?can?be?either?'pooled',?'synchronous'?or?'asynchronous'.
???????????????????????????????*?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.
???????????????????????????????*?Synchronous?means?that?the?thread?that?executes?the?request,?is?also?the
???????????????????????????????thread?the?replicates?the?data?to?the?other?nodes,?and?will?not?return?until?all
???????????????????????????????nodes?have?received?the?information.
???????????????????????????????*?Asynchronous?means?that?there?is?a?specific?'sender'?thread?for?each?cluster?node,
???????????????????????????????so?the?request?thread?will?queue?the?replication?request?into?a?"smart"?queue,
???????????????????????????????and?then?return?to?the?client.
???????????????????????????????The?"smart"?queue?is?a?queue?where?when?a?session?is?added?to?the?queue,?and?the?same?session
???????????????????????????????already?exists?in?the?queue?from?a?previous?request,?that?session?will?be?replaced
???????????????????????????????in?the?queue?instead?of?replicating?two?requests.?This?almost?never?happens,?unless?there?is?a?
???????????????????????????????large?network?delay.
?????????????replicationMode?=?可以是“pooled”、“synchronous”或者“asynchronous”
???????????????????????????????*?Pooled意味著在多個套接字上同步進(jìn)行復(fù)制。例如,先復(fù)制數(shù)據(jù),然后請求返回。
???????????????????????????????這與“synchronous”相同,除了它使用一個套接字池,因此,它是多線程的。它是
???????????????????????????????最快和最高級的設(shè)置,使用這個配置也增加了處理復(fù)制的tcp線程的域。
???????????????????????????????*?Synchronous指執(zhí)行請求的線程,它也是向其他節(jié)點復(fù)制數(shù)據(jù)的線程,并且直到
???????????????????????????????所有的節(jié)點都己經(jīng)收到信息后才返回。
???????????????????????????????*?Asynchronous,對每個群集節(jié)點而言,這是一個特別的“sender”(發(fā)送者)線程,
???????????????????????????????因此請求線程將復(fù)制請求排隊到一個小隊列中,然后,返回給用戶。
???????????????????????????????這個小隊列是一個當(dāng)會話被添加到隊列中,而從先前的請求中,同一個會話己經(jīng)存在
???????????????????????????????,這個會話將被放置在隊列中以代替重復(fù)的兩個請求。這幾乎從不會發(fā)生,除非存在
???????????????????????????????較大的網(wǎng)絡(luò)延遲。
????????-->?
????????<!--
????????????When?configuring?for?clustering,?you?also?add?in?a?valve?to?catch?all?the?requests
????????????coming?in,?at?the?end?of?the?request,?the?session?may?or?may?not?be?replicated.
????????????A?session?is?replicated?if?and?only?if?all?the?conditions?are?met:
????????????1.?useDirtyFlag?is?true?or?setAttribute?or?removeAttribute?has?been?called?AND
????????????2.?a?session?exists?(has?been?created)
????????????3.?the?request?is?not?trapped?by?the?"filter"?attribute
????????????The?filter?attribute?is?to?filter?out?requests?that?could?not?modify?the?session,
????????????hence?we?don't?replicate?the?session?after?the?end?of?this?request.
????????????The?filter?is?negative,?ie,?anything?you?put?in?the?filter,?you?mean?to?filter?out,
????????????ie,?no?replication?will?be?done?on?requests?that?match?one?of?the?filters.
????????????The?filter?attribute?is?delimited?by?;,?so?you?can't?escape?out?;?even?if?you?wanted?to.
????????????filter=".*\.gif;.*\.js;"?means?that?we?will?not?replicate?the?session?after?requests?with?the?URI
????????????ending?with?.gif?and?.js?are?intercepted.
????????-->
????????<!--?當(dāng)配置群集時,你也添加一個值來捕獲所有傳入的請求,在請求結(jié)束時,這個會話可能被子復(fù)制,
?????????????也可能不被復(fù)制。一個會話是否復(fù)制取決于下列條件是否發(fā)生:
?????????????1.?useDirtyFlag為真,或者setAttribute或者removeAttribute己經(jīng)被調(diào)用。
?????????????2.?會話己經(jīng)存在(己經(jīng)被創(chuàng)建了)。
?????????????3.?請求沒有被“filter”屬性所捕獲。
?????????????
?????????????這個filter(過濾器)屬性用于過濾那些不能修改會話的請求,因此,我們在這個請求結(jié)束后不復(fù)制
?????????????會主。這個過濾器是消極的,例如,你向過濾器發(fā)送了一些東西,然后被過濾出去,在那個匹配的過
?????????????濾器上不會發(fā)生復(fù)制。
?????????????過濾器屬性以分號為分隔,因此你不能換行,即使你想這么做。
?????????????
?????????????filter=".*\.gif;.*\.js;"意味著在進(jìn)行以.gif和.js結(jié)束的URI請求后不復(fù)制會話。
????????
????????<!--
????????<Cluster?className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
?????????????????managerClassName="org.apache.catalina.cluster.session.DeltaManager"
?????????????????expireSessionsOnShutdown="false"
?????????????????useDirtyFlag="true">
????????????<Membership?
????????????????className="org.apache.catalina.cluster.mcast.McastService"
????????????????mcastAddr="228.0.0.4"
????????????????mcastPort="45564"
????????????????mcastFrequency="500"
????????????????mcastDropTime="3000"/>
????????????<Receiver?
????????????????className="org.apache.catalina.cluster.tcp.ReplicationListener"
????????????????tcpListenAddress="auto"
????????????????tcpListenPort="4001"
????????????????tcpSelectorTimeout="100"
????????????????tcpThreadCount="6"/>
????????????<Sender
????????????????className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
????????????????replicationMode="pooled"/>
????????????<Valve?className="org.apache.catalina.cluster.tcp.ReplicationValve"
???????????????????filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
????????</Cluster>
????????-->?
????????<!--?Normally,?users?must?authenticate?themselves?to?each?web?app
?????????????individually.?Uncomment?the?following?entry?if?you?would?like
?????????????a?user?to?be?authenticated?the?first?time?they?encounter?a
?????????????resource?protected?by?a?security?constraint,?and?then?have?that
?????????????user?identity?maintained?across?*all*?web?applications?contained
?????????????in?this?virtual?host.?-->
????????<!--?通常,對每一個應(yīng)用程序,用戶必須逐個的認(rèn)證他們自己。當(dāng)他們遇到被
?????????????某種安全約束所保護(hù)的資源時,如果你想讓用戶只在第一次被認(rèn)證,那么,
?????????????取消下面入口行的注釋,然后在這個虛擬主機(jī)中包含這個用戶的,橫跨所有
?????????????web應(yīng)用程序的用戶身份識別。-->
?????????????
????????<!--
????????<Valve?className="org.apache.catalina.authenticator.SingleSignOn"
???????????????????debug="0"/>
????????-->
????????<!--?
Access?log?processes?all?requests?for?this?virtual?host.?By
?????????????default,?log?files?are?created?in?the?"logs"?directory?relative?to
?????????????$CATALINA_HOME.?If?you?wish,?you?can?specify?a?different
?????????????directory?with?the?"directory"?attribute.?Specify?either?a?relative
?????????????(to?$CATALINA_HOME)?or?absolute?path?to?the?desired?directory.
????????-->
????????<!--?這個虛擬主機(jī)的所有請求的訪問日志過程。默認(rèn)情況下,日志文件被創(chuàng)建在相對
?????????????于$CATALINA_HOME目錄下的logs目錄下。通過directory屬性,你也可以指定一個
?????????????不同的目錄,如果你想的話。可以使用相對路徑(相對于$CATALINA_HOME),也
?????????????可以使用絕對路徑。-->
????????<!--
????????<Valve?className="org.apache.catalina.valves.
AccessLogValve"
?????????????????directory="logs"?prefix="localhost_access_log."?suffix=".txt"
?????????????????pattern="common"?resolveHosts="false"/>
????????-->
????????<!--?Logger?shared?by?all?Contexts?related?to?this?virtual?host.?By
?????????????default?(when?using?FileLogger),?log?files?are?created?in?the?"logs"
?????????????directory?relative?to?$CATALINA_HOME.?If?you?wish,?you?can?specify
?????????????a?different?directory?with?the?"directory"?attribute.?Specify?either?a
?????????????relative?(to?$CATALINA_HOME)?or?absolute?path?to?the?desired
?????????????directory.-->
????????<!--?與這個虛擬主機(jī)有關(guān)系所有上下文所共享的日志。默認(rèn)情況下(使用FileLogger時),
?????????????日志文件被創(chuàng)建在相對于$CATALINA_HOME目錄下的logs目錄下。如果你希望,你也可
?????????????以給directory指定一個不同的路徑。可以使用相對于$CATALINA_HOME的相對路徑,也
?????????????可以使用絕對路徑。
????????<Logger?className="org.apache.catalina.logger.FileLogger"
?????????????????directory="logs"?prefix="localhost_log."?suffix=".txt"
????????????timestamp="true"/>
??????</Host>
????</Engine>
??</Service>
</Server>