久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      Tomcat詳解

        PHP:      開發(fā)語言:腳本語言      運(yùn)行環(huán)境:解釋執(zhí)行          Zend Engine:Opcode              Xcache,APC,eAccelerator          MVC:              data:數(shù)據(jù)              bussiness:業(yè)務(wù)                presentation:展示  C/C++:CPU,OS    移植困難    維護(hù)成本高    高速    驅(qū)動(dòng)    oak:橡樹,智能,  java:      包含四個(gè)獨(dú)立卻又彼此相關(guān)的技術(shù):          Java程序設(shè)計(jì)語言          Java API          Java Class文件格式          JVM:Java Virtual Machine  JVM的實(shí)現(xiàn)方式:    1.一次解釋器,解釋字節(jié)碼并執(zhí)行    2.即時(shí)編譯器(just-in-time complier)  依賴于更多內(nèi)存緩存解釋后的結(jié)果    3.自適應(yīng)編譯器 緩存20%左右代碼,提高80%左右的速度  Java設(shè)計(jì)語言:Sun  Java API:  JVM:Hotspot JVM    JRE:java運(yùn)行時(shí)環(huán)境 運(yùn)行    JDK:java開發(fā)環(huán)境 開發(fā)(編譯)+運(yùn)行  JVM:OpenJDK    開發(fā)+運(yùn)行 開源實(shí)現(xiàn)  Java API類庫 第三方類庫  JDK=Java+API+JVM,是用于實(shí)現(xiàn)Java程序開發(fā)的最小環(huán)境  JRE=JVM+java SE API  Java應(yīng)用領(lǐng)域的不同,Java可分為三類:    JAVA SE:Standard Edtion    JAVA EE:Enterprise Edition,J2EE    JAVA ME:Mobile Edtion,J2ME  1995年,JAVA 1.0面世, James Gosling, Green Project    applet:小程序 動(dòng)態(tài)網(wǎng)站    CGI:Common Gateway Interface 協(xié)議        HTML           

      Servlet:CGI JSP:Java Server Page <%language="java"> SSH:struts,Spring,Hebernate JSP–>Servlet(Jasper編譯器)

      Tomcat詳解

        applet, servlet, jsp  JSP:   	.jsp --> .java -->(JVM) .class  JDK: javac, .java --> .class  CGI, Servlet, .java   Web  	Servlet Container: Servlet容器  	Web Container: Web容器  線程私有內(nèi)存區(qū):  	程序計(jì)數(shù)器  	java虛擬機(jī)棧  線程共享內(nèi)存區(qū):  	方法區(qū)  	堆:java自動(dòng)內(nèi)存回收,GC(Garbage Collector)  垃圾回收算法:  	1、標(biāo)記-清除  	2、復(fù)制  		二分之一  	3、標(biāo)記-整理    垃圾回收器:  	Serial  	ParNew  	Parallel Scavenge  	Serial Old  	Parallel Old    	CMS: Concurrent Mark Sweep  		特點(diǎn):并發(fā)收集、低停頓  		缺點(diǎn):無法浮動(dòng)垃圾、由于基于標(biāo)記-清除會產(chǎn)生碎片  	G1  安裝:  rpm  通用二進(jìn)制格式, .bin  源碼
        vim /etc/profile.d/java.sh  export JAVA_HOME=/usr/java/jdk1.6.0_21  export PATH=$PATH:$JAVA_HOME/bin  . /etc/profile.d/java.sh
        java配置參數(shù):  	-XX:+

      Tomcat詳解

        類的生命周期:  Loading:加載  Verification:驗(yàn)證  Preparation:準(zhǔn)備  Resolutin:解析  Initilization:初始化  Using:使用  Unloading:卸載
        Sun JDK監(jiān)控和故障處理工具:  	jps, JVM Process Status Tool: 顯示指定系統(tǒng)內(nèi)所有的HotSpot虛擬機(jī)進(jìn)程的列表信息  	jstat, JVM Statistics Monitoring Tool:收集并顯示HotSpot虛擬機(jī)各方面的運(yùn)行數(shù)據(jù)  	jinfo:顯示正在運(yùn)行的某HotSpot虛擬機(jī)配置信息  	jmap: 生成某HotSpot虛擬機(jī)的內(nèi)存轉(zhuǎn)儲快照;  可視化工具:  	jconsole: Java的監(jiān)控與管理控制臺  	jvisualvm: 

      Tomcat詳解

      Tomcat系列之組件詳解及服務(wù)安裝配置

        Servlet: CGI, java  	硬編碼, html  JSP: <% %>, html  	Jasper, .jsp --> .java  	JSP --> Servlet
        容器類組件:  	Engine, Host, Context  頂級組件:  	Server, Service  Realm(領(lǐng)域): 用戶帳號數(shù)據(jù)庫  Valve(閥門):   	記錄訪問日志  	基于IP認(rèn)證  Logger: 日志記錄器

      Tomcat詳解

      Tomcat詳解

        常見的web容器有:    商業(yè)版:  ◇ Sun GlassFish Enterprise Server   ◇ Sun Java System Web Server  ◇ JBoss Enterprise Application Platform  ◇ WebLogic Application Server  ◇ Caucho's Resin Server  ◇ WebSphere Application Server  ◇ NetWeaver    非商業(yè)版:  ◇ Apache Tomcat   ◇ Apache Geronimo  ◇ GlassFish   ◇ JBoss Application Server   ◇ Jetty  ◇ Tiny Java Web Server   ◇ Eclipse Virgo  server.xml:  Tomcat各組件間的關(guān)系:    	  		  		  			  				   			  		  	    默認(rèn)的, 應(yīng)用程序部署描述符  部署:將一個(gè)web應(yīng)用程序所依賴到的類裝載進(jìn)JVM

      Tomcat詳解

      Tomcat詳解

      Tomcat詳解

      Tomcat系列之a(chǎn)pache使用mod_jk和mod_proxy反向代理

      Tomcat詳解

      Tomcat詳解

        添加一個(gè)新的Host:  編輯server.xml:                          
        <%@ page language="java" %>  

      TomcatA

      <% session.setAttribute("abc","abc"); %>

      Session ID <%= session.getId() %>
      Created on <%= session.getCreationTime() %>

      Tomcat詳解

      192.168.10.8:8080/

      Tomcat詳解

        Java體系結(jié)構(gòu)包括四個(gè)獨(dú)立但相關(guān)的技術(shù):  Java程序設(shè)計(jì)語言  Java class文件格式  Java API  Java VM  用Java語言編譯源代碼,把它編譯成Java Class文件,然后在Java VM中運(yùn)行class文件;當(dāng)編寫程序時(shí),通過調(diào)用類(Java API)中的方法來訪問系統(tǒng)資源,而當(dāng)程序運(yùn)行時(shí),它通過調(diào)用class文件中實(shí)現(xiàn)了Java API的方法也滿足程序的Java API調(diào)用。Java VM和Java API一起組成了一個(gè)“平臺”,所有Java程序都在其上編譯和運(yùn)行,因此,它們有時(shí)也被稱作Java運(yùn)行時(shí)環(huán)境。    Java VM的主要任務(wù)是裝載class文件并且執(zhí)行其中的字節(jié)碼。Java VM包含一個(gè)類裝載器(class loader),它可以從程序和API裝載class文件;而Java API的類只在程序執(zhí)行中需要時(shí)才會被裝載。    Java字節(jié)碼由執(zhí)行引擎來執(zhí)行。而不同的Java VM中,其執(zhí)行引擎的實(shí)現(xiàn)可能各不相同。最簡單的執(zhí)行引擎不是一次性解釋字節(jié)碼,而另一種稱為“即時(shí)編譯器(just-in-time compiler)”的執(zhí)行引擎執(zhí)行速度更快,但要消耗更多的內(nèi)存資源。即時(shí)編譯模式下,第一次被執(zhí)行的字節(jié)碼會被編譯成本地機(jī)器代碼并緩存下來以實(shí)現(xiàn)“復(fù)用”。第三種執(zhí)行引擎是所謂的自適應(yīng)優(yōu)化器,此種方法中,虛擬機(jī)始的時(shí)候解釋字節(jié)碼,介是會監(jiān)視運(yùn)行中程序的活動(dòng),并且記錄下使用最頻繁的代碼。程序運(yùn)行時(shí),虛擬機(jī)只把那些活動(dòng)最頻繁的代碼編譯成本地代碼,而不頻繁的代碼則仍然保留為字節(jié)碼由虛擬機(jī)解釋執(zhí)行。自適應(yīng)優(yōu)化器可以使得Java VM在80%-90%的時(shí)間里執(zhí)行被優(yōu)化過的本地代碼,而只需要編譯10%-20%對性能有影響的代碼。最后一種虛擬機(jī)由硬件芯片構(gòu)成,它用本地方法執(zhí)行Java字節(jié)碼,其執(zhí)行引擎內(nèi)嵌于芯片中。    Sun公司創(chuàng)建了第一個(gè)Servlet容器,即Java Web Server, 但JWS只是為了演示Servlet的相應(yīng)功能,所以其很不穩(wěn)定。與此同時(shí),ASF創(chuàng)建了JServ項(xiàng)目,一個(gè)能夠與apache整合起來的servlet容器。1999年,Sun把JWS捐給了ASF,于是兩個(gè)項(xiàng)目合二為一,即今天Tomcat的前身。第一個(gè)tomcat版本是Tomcat 3.x系列,而發(fā)布于2001年Tomcat4.0則是在此前基礎(chǔ)上進(jìn)行了重新設(shè)計(jì)和實(shí)現(xiàn),其代碼項(xiàng)目被命名為Catalina。目前最新的版本則是7.x系列。    Java SE則包含了Java二進(jìn)制程序(如JVM和Java字節(jié)碼編譯器)和Java的核心代碼庫,而Jave EE標(biāo)準(zhǔn)則包含了一組適用于創(chuàng)建企業(yè)級Web應(yīng)用程序的API。Jave EE建立在Java SE的基礎(chǔ)上,并依賴于Java SE才能正常工作。當(dāng)然,任何級別的應(yīng)用程序均能從Java EE中獲益,但Jave EE卻更適合解決大型軟件系統(tǒng)設(shè)計(jì)中的問題。    JAVA EE包含多個(gè)獨(dú)立的API,Servlet和JSP就是其中的兩個(gè),而JAVA EE中著名的API中還包含如下的幾個(gè):    JAVA EE APIs:  EJB(Enterprise JavaBeans):JAVA相關(guān)的諸多高級功能的實(shí)現(xiàn),如RMI(Remote Method Invocation), 對象/關(guān)系映射,跨越多個(gè)數(shù)據(jù)源的分布式事務(wù)等;    JMS(Java Message Service):高性能異步消息服務(wù),實(shí)現(xiàn)JAVA EE應(yīng)用程序與非JAVA程序的“透明”通信;    JMX(Java Management Extensions):在程序運(yùn)行時(shí)對其進(jìn)行交互式監(jiān)控和管理的機(jī)制;    JTA(Java Transaction API):允許應(yīng)用程序在自身的一個(gè)或多個(gè)組件中平滑地處理錯(cuò)誤的機(jī)制;    JavaMail:通過工業(yè)標(biāo)準(zhǔn)的POP/SMTP/IMAP協(xié)議發(fā)送和接收郵件的機(jī)制;    Java SE APIs:  JNDI(Java Naming and Directory Interface):用于與LDAP服務(wù)交互的API;  JAXP(Java API for XML Processing):用于分析及轉(zhuǎn)換XML(基于XSLT實(shí)現(xiàn));    Java SE API + JDK    JAVA EE Application Servers:  Websphere  Weblogic  oc4j  JBoss  JOnAS  Geronimo  Glassfish    risen    Sun --> TWS    RI: Reference Implimentation      參考實(shí)現(xiàn)    ASF:Apache Software Foundation    Jserv    Sun --> ASF    catalina    O'Reilly: Tomcat      男貓    類,.jar  JVM,    Tomcat: Servlet and JSP APIs,  JNDI and JMX APIs.    Tomcat不是一個(gè)完整意義上的Jave EE服務(wù)器,它甚至都沒有提供對哪怕是一個(gè)主要Java EE API的實(shí)現(xiàn);但由于遵守apache開源協(xié)議,tomcat卻又為眾多的java應(yīng)用程序服務(wù)器嵌入自己的產(chǎn)品中構(gòu)建商業(yè)的java應(yīng)用程序服務(wù)器,如JBoss和JOnAS。    盡管Tomcat對Jave EE API的實(shí)現(xiàn)并不完整,然而很企業(yè)也在漸漸拋棄使用傳統(tǒng)的Java EE技術(shù)(如EJB)轉(zhuǎn)而采用一些開源組件來構(gòu)建復(fù)雜的應(yīng)用。這些開源組件如Structs、Spring和Hibernate,而Tomcat能夠?qū)@些組件實(shí)現(xiàn)完美的支持。    HTTP是一種無狀態(tài)的協(xié)議,在用戶的一次連接請求響應(yīng)完成后,服務(wù)器端將無法識別在后續(xù)的連接請求中再次識別此用戶,交將其所有請求關(guān)聯(lián)起來。為了解決這個(gè)問題,java container通過一個(gè)臨時(shí)的cookie來為此用戶保存一個(gè)標(biāo)識,此標(biāo)識即所謂的用戶session。  在第一次調(diào)用之后,JSP會被編譯成一個(gè)servlet類,在后續(xù)的操作中則可以直接使用此類,從而避免了對每一次調(diào)用的都要重新分析和編譯。因此,類似servlet,JSP的執(zhí)行需要在container中完成。JSP的container跟servlet的container基本相同,但在JSP執(zhí)行之前,需要一些額外的步驟如與servlet代碼建立會話等。Tomcat包含了一個(gè)叫做Catalina的Servlet container(執(zhí)行servlet和編譯過的JSP)和一個(gè)JSP編譯器(Jasper編譯器)。事實(shí)上,一個(gè)包含了JSP編譯器和Servlet容器的應(yīng)用程序組合通過被稱作Web容器。    JSP和Servlet的最大區(qū)別在于,Servlet通常需要事先編譯好,而JSP則并非必須事先編譯。這意味著Servlet通常放置于私有資源區(qū)域,而JSP則通常以嵌入代碼的方式包含于HTML頁面文件中,這些HTML文件通常放置在公開資源區(qū)域。    MVC架構(gòu):  Controller,Model和View各自獨(dú)立,一個(gè)流行的開源實(shí)現(xiàn)是Apache Structs框架;目今,設(shè)計(jì)優(yōu)良的Web應(yīng)用程序通常用相就的技術(shù)實(shí)現(xiàn)相應(yīng)的功能,比如:  1、Servlet用于實(shí)現(xiàn)應(yīng)用邏輯;  2、JSP用于內(nèi)容展示;  3、標(biāo)簽庫和JSP擴(kuò)展語言用于替換在JSP內(nèi)部嵌入Java代碼,進(jìn)而降低了HTML維護(hù)的復(fù)雜度;  4、MVC框架用于實(shí)現(xiàn)展示和應(yīng)用邏輯的分離;    對于一個(gè)Web應(yīng)用程序而言,其通常由Servlets、JSP和其它文件等共同組成。這些文件通常被打包成WAR(Web Application Archive)格式,并以.war作為打包后的文件擴(kuò)展名。而Servlet規(guī)范則定義了在WAR內(nèi)部組織這些文件的標(biāo)準(zhǔn)目錄結(jié)構(gòu)。其目錄和功用如下:  /  Web應(yīng)用程序的根目錄,所有可被公開訪問的文件均放置于此處,如HTML、JSP和圖片文件等;  /WEB-INF  此目錄為私有資源目錄,其內(nèi)部的所有文件和子目錄均不能被公開訪問;包含著此Web應(yīng)用程序的配置文件web.xml(程序結(jié)構(gòu)描述符文件)通常放置于此目錄;  /WEB-INF/classes  當(dāng)前Web應(yīng)用程序的類文件的存在目錄;  /WEB-INF/lib  可被打包為JAR格式的類文件通常放置于此目錄;    安裝tomcat:  一、先安裝JVM  二、安裝配置tomcat    A Tomcat init script for Linux  #!/bin/sh  # Tomcat init script for Linux.  #  # chkconfig: 2345 96 14  # description: The Apache Tomcat servlet/JSP container.  JAVA_HOME=/usr/java/jdk1.7.0_05  CATALINA_HOME=/opt/apache-tomcat-7.0.29  export JAVA_HOME CATALINA_HOME  exec $CATALINA_HOME/bin/catalina.sh $*    Tomcat的架構(gòu):  Tomcat 6支持Servlet 2.5和JSP 2.1的規(guī)范,它由一組嵌套的層次和組件組成,一般可分為以下四類:  頂級組件:位于配置層次的頂級,并且彼此間有著嚴(yán)格的對應(yīng)關(guān)系;  連接器:連接客戶端(可以是瀏覽器或Web服務(wù)器)請求至Servlet容器,  容器:包含一組其它組件;  被嵌套的組件:位于一個(gè)容器當(dāng)中,但不能包含其它組件;    各常見組件:  1、服務(wù)器(server):Tomcat的一個(gè)實(shí)例,通常一個(gè)JVM只能包含一個(gè)Tomcat實(shí)例;因此,一臺物理服務(wù)器上可以在啟動(dòng)多個(gè)JVM的情況下在每一個(gè)JVM中啟動(dòng)一個(gè)Tomcat實(shí)例,每個(gè)實(shí)例分屬于一個(gè)獨(dú)立的管理端口。這是一個(gè)頂級組件。  2、服務(wù)(service):一個(gè)服務(wù)組件通常包含一個(gè)引擎和與此引擎相關(guān)聯(lián)的一個(gè)或多個(gè)連接器。給服務(wù)命名可以方便管理員在日志文件中識別不同服務(wù)產(chǎn)生的日志。一個(gè)server可以包含多個(gè)service組件,但通常情下只為一個(gè)service指派一個(gè)server。    連接器類組件:  3、連接器(connectors):負(fù)責(zé)連接客戶端(可以是瀏覽器或Web服務(wù)器)請求至Servlet容器內(nèi)的Web應(yīng)用程序,通常指的是接收客戶發(fā)來請求的位置及服務(wù)器端分配的端口。默認(rèn)端口通常是HTTP協(xié)議的8080,管理員也可以根據(jù)自己的需要改變此端口。一個(gè)引擎可以配置多個(gè)連接器,但這些連接器必須使用不同的端口。默認(rèn)的連接器是基于HTTP/1.1的Coyote。同時(shí),Tomcat也支持AJP、JServ和JK2連接器。    容器類組件:  4、引擎(Engine):引擎通是指處理請求的Servlet引擎組件,即Catalina Servlet引擎,它檢查每一個(gè)請求的HTTP首部信息以辨別此請求應(yīng)該發(fā)往哪個(gè)host或context,并將請求處理后的結(jié)果返回的相應(yīng)的客戶端。嚴(yán)格意義上來說,容器不必非得通過引擎來實(shí)現(xiàn),它也可以是只是一個(gè)容器。如果Tomcat被配置成為獨(dú)立服務(wù)器,默認(rèn)引擎就是已經(jīng)定義好的引擎。而如果Tomcat被配置為Apache Web服務(wù)器的提供Servlet功能的后端,默認(rèn)引擎將被忽略,因?yàn)閃eb服務(wù)器自身就能確定將用戶請求發(fā)往何處。一個(gè)引擎可以包含多個(gè)host組件。  5、主機(jī)(Host):主機(jī)組件類似于Apache中的虛擬主機(jī),但在Tomcat中只支持基于FQDN的“虛擬主機(jī)”。一個(gè)引擎至少要包含一個(gè)主機(jī)組件。  6、上下文(Context):Context組件是最內(nèi)層次的組件,它表示W(wǎng)eb應(yīng)用程序本身。配置一個(gè)Context最主要的是指定Web應(yīng)用程序的根目錄,以便Servlet容器能夠?qū)⒂脩粽埱蟀l(fā)往正確的位置。Context組件也可包含自定義的錯(cuò)誤頁,以實(shí)現(xiàn)在用戶訪問發(fā)生錯(cuò)誤時(shí)提供友好的提示信息。    被嵌套類(nested)組件:  這類組件通常包含于容器類組件中以提供具有管理功能的服務(wù),它們不能包含其它組件,但有些卻可以由不同層次的容器各自配置。  7、閥門(Valve):用來攔截請求并在將其轉(zhuǎn)至目標(biāo)之前進(jìn)行某種處理操作,類似于Servlet規(guī)范中定義的過濾器。Valve可以定義在任何容器類的組件中。Valve常被用來記錄客戶端請求、客戶端IP地址和服務(wù)器等信息,這種處理技術(shù)通常被稱作請求轉(zhuǎn)儲(request dumping)。請求轉(zhuǎn)儲valve記錄請求客戶端請求數(shù)據(jù)包中的HTTP首部信息和cookie信息文件中,響應(yīng)轉(zhuǎn)儲valve則記錄響應(yīng)數(shù)據(jù)包首部信息和cookie信息至文件中。  8、日志記錄器(Logger):用于記錄組件內(nèi)部的狀態(tài)信息,可被用于除Context之外的任何容器中。日志記錄的功能可被繼承,因此,一個(gè)引擎級別的Logger將會記錄引擎內(nèi)部所有組件相關(guān)的信息,除非某內(nèi)部組件定義了自己的Logger組件。  9、領(lǐng)域(Realm):用于用戶的認(rèn)證和授權(quán);在配置一個(gè)應(yīng)用程序時(shí),管理員可以為每個(gè)資源或資源組定義角色及權(quán)限,而這些訪問控制功能的生效需要通過Realm來實(shí)現(xiàn)。Realm的認(rèn)證可以基于文本文件、數(shù)據(jù)庫表、LDAP服務(wù)等來實(shí)現(xiàn)。Realm的效用會遍及整個(gè)引擎或頂級容器,因此,一個(gè)容器內(nèi)的所有應(yīng)用程序?qū)⒐蚕碛脩糍Y源。同時(shí),Realm可以被其所在組件的子組件繼承,也可以被子組件中定義的Realm所覆蓋。    引擎(Engine):引擎是指處理請求的Servlet引擎組件,即Catalina Servlet引擎,它從HTTPconnector接收請求并響應(yīng)請求。它檢查每一個(gè)請求的HTTP首部信息以辨別此請求應(yīng)該發(fā)往哪個(gè)host或context,并將請求處理后的結(jié)果返回的相應(yīng)的客戶端。嚴(yán)格意義上來說,容器不必非得通過引擎來實(shí)現(xiàn),它也可以是只是一個(gè)容器。如果Tomcat被配置成為獨(dú)立服務(wù)器,默認(rèn)引擎就是已經(jīng)定義好的引擎。而如果Tomcat被配置為Apache Web服務(wù)器的提供Servlet功能的后端,默認(rèn)引擎將被忽略,因?yàn)閃eb服務(wù)器自身就能確定將用戶請求發(fā)往何處。一個(gè)引擎可以包含多個(gè)host組件。    Tomcat連接器架構(gòu):  基于Apache做為Tomcat前端的架構(gòu)來講,Apache通過mod_jk、mod_jk2或mod_proxy模塊與后端的Tomcat進(jìn)行數(shù)據(jù)交換。而對Tomcat來說,每個(gè)Web容器實(shí)例都有一個(gè)Java語言開發(fā)的連接器模塊組件,在Tomcat6中,這個(gè)連接器是org.apache.catalina.Connector類。這個(gè)類的構(gòu)造器可以構(gòu)造兩種類別的連接器:HTTP/1.1負(fù)責(zé)響應(yīng)基于HTTP/HTTPS協(xié)議的請求,AJP/1.3負(fù)責(zé)響應(yīng)基于AJP的請求。但可以簡單地通過在server.xml配置文件中實(shí)現(xiàn)連接器的創(chuàng)建,但創(chuàng)建時(shí)所使用的類根據(jù)系統(tǒng)是支持APR(Apache Portable Runtime)而有所不同。  APR是附加在提供了通用和標(biāo)準(zhǔn)API的操作系統(tǒng)之上一個(gè)通訊層的本地庫的集合,它能夠?yàn)槭褂昧薃PR的應(yīng)用程序在與Apache通信時(shí)提供較好伸縮能力時(shí)帶去平衡效用。  同時(shí),需要說明的是,mod_jk2模塊目前已經(jīng)不再被支持了,mod_jk模塊目前還apache被支持,但其項(xiàng)目活躍度已經(jīng)大大降低。因此,目前更常用 的方式是使用mod_proxy模塊。    如果支持APR:  1、HTTP/1.1:org.apache.cotote.http11.Http11AprProtocol  2、AJP/1.3:org.apache.coyote.ajp.AjpAprProtocol  如果不支持APR:  HTTP/1.1: org.apache.coyote.http11.Http11Protocol  AJP/1.3: org.apache.jk.server.JkCoyoteHandler    連接器協(xié)議:    Tomcat的Web服務(wù)器連接器支持兩種協(xié)議:AJP和HTTP,它們均定義了以二進(jìn)制格式在Web服務(wù)器和Tomcat之間進(jìn)行數(shù)據(jù)傳輸,并提供相應(yīng)的控制命令。    AJP(Apache JServ Protocol)協(xié)議:  目前正在使用的AJP協(xié)議的版本是通過JK和JK2連接器提供支持的AJP13,它基于二進(jìn)制的格式在Web服務(wù)器和Tomcat之間傳輸數(shù)據(jù),而此前的版本AJP10和AJP11則使用文本格式傳輸數(shù)據(jù)。    HTTP協(xié)議:誠如其名稱所表示,其是使用HTTP或HTTPS協(xié)議在Web服務(wù)器和Tomcat之間建立通信,此時(shí),Tomcat就是一個(gè)完全功能的HTTP服務(wù)器,它需要監(jiān)聽在某端口上以接收來自于商前服務(wù)器的請求。    Tomcat的配置文件:  Tomcat的配置文件默認(rèn)存放在$CATALINA_HOME/conf目錄中,主要有以下幾個(gè):  server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關(guān)配置信息;  web.xml:遵循Servlet規(guī)范標(biāo)準(zhǔn)的配置文件,用于配置servlet,并為所有的Web應(yīng)用程序提供包括MIME映射等默認(rèn)配置信息;  tomcat-user.xml:Realm認(rèn)證時(shí)用到的相關(guān)角色、用戶和密碼等信息;Tomcat自帶的manager默認(rèn)情況下會用到此文件;在Tomcat中添加/刪除用戶,為用戶指定角色等將通過編輯此文件實(shí)現(xiàn);  catalina.policy:Java相關(guān)的安全策略配置文件,在系統(tǒng)資源級別上提供訪問控制的能力;  catalina.properties:Tomcat內(nèi)部package的定義及訪問相關(guān)的控制,也包括對通過類裝載器裝載的內(nèi)容的控制;Tomcat6在啟動(dòng)時(shí)會事先讀取此文件的相關(guān)設(shè)置;  logging.properties: Tomcat6通過自己內(nèi)部實(shí)現(xiàn)的JAVA日志記錄器來記錄操作相關(guān)的日志,此文件即為日志記錄器相關(guān)的配置信息,可以用來定義日志記錄的組件級別以及日志文件的存在位置等;  context.xml:所有host的默認(rèn)配置信息;    一、server.xml  Tomcat以面向?qū)ο蟮姆绞竭\(yùn)行,它可以在運(yùn)行時(shí)動(dòng)態(tài)加載配置文件中定義的對象結(jié)構(gòu),這有點(diǎn)類似于apache的httpd模塊的調(diào)用方式。server.xml中定義的每個(gè)主元素都會被創(chuàng)建為對象,并以某特定的層次結(jié)構(gòu)將這些對象組織在一起。下面是個(gè)樣樣例配置:                                                                                                                                                                                                                                      server.xml文件中可定義的元素非常多,包括Server, Service, Connector, Engine, Cluster, Host, Alias, Context, Realm, Valve, Manager, Listener, Resources, Resource, ResourceEnvRef, ResourceLink, WatchedResource, GlobalNameingResources, Store, Transaction, Channel, Membership, Transport, Member, ClusterListener等。    下面簡單介紹幾個(gè)常用組件:  1、Server組件    如上面示例文件中定義的:      這會讓Tomcat6啟動(dòng)一個(gè)server實(shí)例(即一個(gè)JVM),它監(jiān)聽在8005端口以接收shutdown命令。各Server的定義不能使用同一個(gè)端口,這意味著如果在同一個(gè)物理機(jī)上啟動(dòng)了多個(gè)Server實(shí)例,必須配置它們使用不同的端口。這個(gè)端口的定義用于為管理員提供一個(gè)關(guān)閉此實(shí)例的便捷途徑,因此,管理員可以直接telnet至此端口使用SHUTDOWN命令關(guān)閉此實(shí)例。不過,基于安全角度的考慮,這通常不允許遠(yuǎn)程進(jìn)行。    Server的相關(guān)屬性:  className: 用于實(shí)現(xiàn)此Server容器的完全限定類的名稱,默認(rèn)為org.apache.catalina.core.StandardServer;  port: 接收shutdown指令的端口,默認(rèn)僅允許通過本機(jī)訪問,默認(rèn)為8005;  shutdown:發(fā)往此Server用于實(shí)現(xiàn)關(guān)閉tomcat實(shí)例的命令字符串,默認(rèn)為SHUTDOWN;    2、Service組件:  Service主要用于關(guān)聯(lián)一個(gè)引擎和與此引擎相關(guān)的連接器,每個(gè)連接器通過一個(gè)特定的端口和協(xié)議接收入站請求交將其轉(zhuǎn)發(fā)至關(guān)聯(lián)的引擎進(jìn)行處理。困此,Service要包含一個(gè)引擎、一個(gè)或多個(gè)連接器。    如上面示例中的定義:      這定義了一個(gè)名為Catalina的Service,此名字也會在產(chǎn)生相關(guān)的日志信息時(shí)記錄在日志文件當(dāng)中。    Service相關(guān)的屬性:  className: 用于實(shí)現(xiàn)service的類名,一般都是org.apache.catalina.core.StandardService。  name:此服務(wù)的名稱,默認(rèn)為Catalina;    3、Connector組件:  進(jìn)入Tomcat的請求可以根據(jù)Tomcat的工作模式分為如下兩類:  Tomcat作為應(yīng)用程序服務(wù)器:請求來自于前端的web服務(wù)器,這可能是Apache, IIS, Nginx等;  Tomcat作為獨(dú)立服務(wù)器:請求來自于web瀏覽器;    Tomcat應(yīng)該考慮工作情形并為相應(yīng)情形下的請求分別定義好需要的連接器才能正確接收來自于客戶端的請求。一個(gè)引擎可以有一個(gè)或多個(gè)連接器,以適應(yīng)多種請求方式。    定義連接器可以使用多種屬性,有些屬性也只適用于某特定的連接器類型。一般說來,常見于server.xml中的連接器類型通常有4種:  1) HTTP連接器  2) SSL連接器  3) AJP 1.3連接器  4) proxy連接器    如上面示例server.xml中定義的HTTP連接器:            定義連接器時(shí)可以配置的屬性非常多,但通常定義HTTP連接器時(shí)必須定義的屬性只有“port”,定義AJP連接器時(shí)必須定義的屬性只有"protocol",因?yàn)槟J(rèn)的協(xié)議為HTTP。以下為常用屬性的說明:  1) address:指定連接器監(jiān)聽的地址,默認(rèn)為所有地址,即0.0.0.0;  2) maxThreads:支持的最大并發(fā)連接數(shù),默認(rèn)為200;  3) port:監(jiān)聽的端口,默認(rèn)為0;  4) protocol:連接器使用的協(xié)議,默認(rèn)為HTTP/1.1,定義AJP協(xié)議時(shí)通常為AJP/1.3;  5) redirectPort:如果某連接器支持的協(xié)議是HTTP,當(dāng)接收客戶端發(fā)來的HTTPS請求時(shí),則轉(zhuǎn)發(fā)至此屬性定義的端口;  6) connectionTimeout:等待客戶端發(fā)送請求的超時(shí)時(shí)間,單位為毫秒,默認(rèn)為60000,即1分鐘;  7) enableLookups:是否通過request.getRemoteHost()進(jìn)行DNS查詢以獲取客戶端的主機(jī)名;默認(rèn)為true;  8) acceptCount:設(shè)置等待隊(duì)列的最大長度;通常在tomcat所有處理線程均處于繁忙狀態(tài)時(shí),新發(fā)來的請求將被放置于等待隊(duì)列中;    下面是一個(gè)定義了多個(gè)屬性的SSL連接器:      4、Engine組件:  Engine是Servlet處理器的一個(gè)實(shí)例,即servlet引擎,默認(rèn)為定義在server.xml中的Catalina。Engine需要defaultHost屬性來為其定義一個(gè)接收所有發(fā)往非明確定義虛擬主機(jī)的請求的host組件。如前面示例中定義的:      常用的屬性定義:  defaultHost:Tomcat支持基于FQDN的虛擬主機(jī),這些虛擬主機(jī)可以通過在Engine容器中定義多個(gè)不同的Host組件來實(shí)現(xiàn);但如果此引擎的連接器收到一個(gè)發(fā)往非非明確定義虛擬主機(jī)的請求時(shí)則需要將此請求發(fā)往一個(gè)默認(rèn)的虛擬主機(jī)進(jìn)行處理,因此,在Engine中定義的多個(gè)虛擬主機(jī)的主機(jī)名稱中至少要有一個(gè)跟defaultHost定義的主機(jī)名稱同名;  name:Engine組件的名稱,用于日志和錯(cuò)誤信息記錄時(shí)區(qū)別不同的引擎;    Engine容器中可以包含Realm、Host、Listener和Valve子容器。    5、Host組件:  位于Engine容器中用于接收請求并進(jìn)行相應(yīng)處理的主機(jī)或虛擬主機(jī),如前面示例中的定義:                    常用屬性說明:  1) appBase:此Host的webapps目錄,即存放非歸檔的web應(yīng)用程序的目錄或歸檔后的WAR文件的目錄路徑;可以使用基于$CATALINA_HOME的相對路徑;  2) autoDeploy:在Tomcat處于運(yùn)行狀態(tài)時(shí)放置于appBase目錄中的應(yīng)用程序文件是否自動(dòng)進(jìn)行deploy;默認(rèn)為true;  3) unpackWars:在啟用此webapps時(shí)是否對WAR格式的歸檔文件先進(jìn)行展開;默認(rèn)為true;    虛擬主機(jī)定義示例:                                                主機(jī)別名定義:  如果一個(gè)主機(jī)有兩個(gè)或兩個(gè)以上的主機(jī)名,額外的名稱均可以以別名的形式進(jìn)行定義,如下:      magedu.com      6、Context組件:  Context在某些意義上類似于apache中的路徑別名,一個(gè)Context定義用于標(biāo)識tomcat實(shí)例中的一個(gè)Web應(yīng)用程序;如下面的定義:                                                                                在Tomcat6中,每一個(gè)context定義也可以使用一個(gè)單獨(dú)的XML文件進(jìn)行,其文件的目錄為$CATALINA_HOME/conf//??梢杂糜贑ontext中的XML元素有Loader,Manager,Realm,Resources和WatchedResource。    常用的屬性定義有:  1) docBase:相應(yīng)的Web應(yīng)用程序的存放位置;也可以使用相對路徑,起始路徑為此Context所屬Host中appBase定義的路徑;切記,docBase的路徑名不能與相應(yīng)的Host中appBase中定義的路徑名有包含關(guān)系,比如,如果appBase為deploy,而docBase絕不能為deploy-bbs類的名字;  2) path:相對于Web服務(wù)器根路徑而言的URI;如果為空“”,則表示為此webapp的根路徑;如果context定義在一個(gè)單獨(dú)的xml文件中,此屬性不需要定義;  3) reloadable:是否允許重新加載此context相關(guān)的Web應(yīng)用程序的類;默認(rèn)為false;    7、Realm組件:  一個(gè)Realm表示一個(gè)安全上下文,它是一個(gè)授權(quán)訪問某個(gè)給定Context的用戶列表和某用戶所允許切換的角色相關(guān)定義的列表。因此,Realm就像是一個(gè)用戶和組相關(guān)的數(shù)據(jù)庫。定義Realm時(shí)惟一必須要提供的屬性是classname,它是Realm的多個(gè)不同實(shí)現(xiàn),用于表示此Realm認(rèn)證的用戶及角色等認(rèn)證信息的存放位置。  JAASRealm:基于Java Authintication and Authorization Service實(shí)現(xiàn)用戶認(rèn)證;  JDBCRealm:通過JDBC訪問某關(guān)系型數(shù)據(jù)庫表實(shí)現(xiàn)用戶認(rèn)證;  JNDIRealm:基于JNDI使用目錄服務(wù)實(shí)現(xiàn)認(rèn)證信息的獲?。? MemoryRealm:查找tomcat-user.xml文件實(shí)現(xiàn)用戶信息的獲??;  UserDatabaseRealm:基于UserDatabase文件(通常是tomcat-user.xml)實(shí)現(xiàn)用戶認(rèn)證,它實(shí)現(xiàn)是一個(gè)完全可更新和持久有效的MemoryRealm,因此能夠跟標(biāo)準(zhǔn)的MemoryRealm兼容;它通過JNDI實(shí)現(xiàn);    下面是一個(gè)常見的使用UserDatabase的配置:        下面是一個(gè)使用JDBC方式獲取用戶認(rèn)證信息的配置:    mysql://localhost/authority" debug="99" drivername="org.gjt.mm.mysql.Driver" rolenamecol="role_name" usercredcol="user_pass" usernamecol="user_name" userroletable="user_roles" usertable="users">    8、Valve組件:  Valve類似于過濾器,它可以工作于Engine和Host/Context之間、Host和Context之間以及Context和Web應(yīng)用程序的某資源之間。一個(gè)容器內(nèi)可以建立多個(gè)Valve,而且Valve定義的次序也決定了它們生效的次序。Tomcat6中實(shí)現(xiàn)了多種不同的Valve:  AccessLogValve:訪問日志Valve  ExtendedAccessValve:擴(kuò)展功能的訪問日志Valve  JDBCAccessLogValve:通過JDBC將訪問日志信息發(fā)送到數(shù)據(jù)庫中;  RequestDumperValve:請求轉(zhuǎn)儲Valve;  RemoteAddrValve:基于遠(yuǎn)程地址的訪問控制;  RemoteHostValve:基于遠(yuǎn)程主機(jī)名稱的訪問控制;  SemaphoreValve:用于控制Tomcat主機(jī)上任何容器上的并發(fā)訪問數(shù)量;  JvmRouteBinderValve:在配置多個(gè)Tomcat為以Apache通過mod_proxy或mod_jk作為前端的集群架構(gòu)中,當(dāng)期望停止某節(jié)點(diǎn)時(shí),可以通過此Valve將用記請求定向至備用節(jié)點(diǎn);使用此Valve,必須使用JvmRouteSessionIDBinderListener;  ReplicationValve:專用于Tomcat集群架構(gòu)中,可以在某個(gè)請求的session信息發(fā)生更改時(shí)觸發(fā)session數(shù)據(jù)在各節(jié)點(diǎn)間進(jìn)行復(fù)制;  SingleSignOn:將兩個(gè)或多個(gè)需要對用戶進(jìn)行認(rèn)證webapp在認(rèn)證用戶時(shí)連接在一起,即一次認(rèn)證即可訪問所有連接在一起的webapp;  ClusterSingleSingOn:對SingleSignOn的擴(kuò)展,專用于Tomcat集群當(dāng)中,需要結(jié)合ClusterSingleSignOnListener進(jìn)行工作;    RemoteHostValve和RemoteAddrValve可以分別用來實(shí)現(xiàn)基于主機(jī)名稱和基于IP地址的訪問控制,控制本身可以通過allow或deny來進(jìn)行定義,這有點(diǎn)類似于Apache的訪問控制功能;如下面的Valve則實(shí)現(xiàn)了僅允許本機(jī)訪問/probe:                  其中相關(guān)屬性定義有:  1) className:相關(guān)的java實(shí)現(xiàn)的類名,相應(yīng)于分別應(yīng)該為org.apache.catalina.valves.RemoteHostValve或org.apache.catalina.valves.RemoteAddrValve;  2) allow:以逗號分開的允許訪問的IP地址列表,支持正則表達(dá)式,因此,點(diǎn)號“.”用于IP地址時(shí)需要轉(zhuǎn)義;僅定義allow項(xiàng)時(shí),非明確allow的地址均被deny;  3) deny: 以逗號分開的禁止訪問的IP地址列表,支持正則表達(dá)式;使用方式同allow;    9、GlobalNamingResources  應(yīng)用于整個(gè)服務(wù)器的JNDI映射,此可以避免每個(gè)Web應(yīng)用程序都需要在各自的web.xml創(chuàng)建,這在web應(yīng)用程序以WAR的形式存在時(shí)尤為有用。它通??梢园齻€(gè)子元素:  1) Environment;  2) Resource;  3) ResourceEnvRef;    10、WatchedResource  WatchedResource可以用于Context中監(jiān)視指定的webapp程序文件的改變,并且能夠在監(jiān)視到文件內(nèi)容發(fā)生改變時(shí)重新裝載此文件。    11、Listener  Listener用于創(chuàng)建和配置LifecycleListener對象,而LifecycleListener通常被開發(fā)人員用來創(chuàng)建和刪除容器。    11、Loader  Java的動(dòng)態(tài)裝載功能是其語言功能強(qiáng)大表現(xiàn)之一,Servlet容器使用此功能在運(yùn)行時(shí)動(dòng)態(tài)裝載servlet和它們所依賴的類。Loader可以用于Context中控制java類的加載。    12、Manager  Manger對象用于實(shí)現(xiàn)HTTP會話管理的功能,Tomcat6中有5種Manger的實(shí)現(xiàn):  1) StandardManager  Tomcat6的默認(rèn)會話管理器,用于非集群環(huán)境中對單個(gè)處于運(yùn)行狀態(tài)的Tomcat實(shí)例會話進(jìn)行管理。當(dāng)Tomcat關(guān)閉時(shí),這些會話相關(guān)的數(shù)據(jù)會被寫入磁盤上的一個(gè)名叫SESSION.ser的文件,并在Tomcat下次啟動(dòng)時(shí)讀取此文件。  2) PersistentManager  當(dāng)一個(gè)會話長時(shí)間處于空閑狀態(tài)時(shí)會被寫入到swap會話對象,這對于內(nèi)存資源比較吃緊的應(yīng)用環(huán)境來說比較有用。  3)DeltaManager  用于Tomcat集群的會話管理器,它通過將改變了會話數(shù)據(jù)同步給集群中的其它節(jié)點(diǎn)實(shí)現(xiàn)會話復(fù)制。這種實(shí)現(xiàn)會將所有會話的改變同步給集群中的每一個(gè)節(jié)點(diǎn),也是在集群環(huán)境中用得最多的一種實(shí)現(xiàn)方式。  4) BackupManager  用于Tomcat集群的會話管理器,與DeltaManager不同的是,某節(jié)點(diǎn)會話的改變只會同步給集群中的另一個(gè)而非所有節(jié)點(diǎn)。  5)SimpleTcpReplicationManager  Tomcat4時(shí)用到的版本,過于老舊了。    13、Stores  PersistentManager必須包含一個(gè)Store元素以指定將會話數(shù)據(jù)存儲至何處。這通常有兩種實(shí)現(xiàn)方式:FileStore和JDBCStore。    14、Resources  經(jīng)常用于實(shí)現(xiàn)在Context中指定需要裝載的但不在Tomcat本地磁盤上的應(yīng)用資源,如Java類,HTML頁面,JSP文件等。    15、Cluster  專用于配置Tomcat集群的元素,可用于Engine和Host容器中。在用于Engine容器中時(shí),Engine中的所有Host均支持集群功能。在Cluster元素中,需要直接定義一個(gè)Manager元素,這個(gè)Manager元素有一個(gè)其值為org.apache.catalina.ha.session.DeltaManager或org.apache.catalina.ha.session.BackupManager的className屬性。同時(shí),Cluster中還需要分別定義一個(gè)Channel和ClusterListener元素。    15.1、Channel  用于Cluster中給集群中同一組中的節(jié)點(diǎn)定義通信“信道”。Channel中需要至少定義Membership、Receiver和Sender三個(gè)元素,此外還有一個(gè)可選元素Interceptor。    15.2、Membership  用于Channel中配置同一通信信道上節(jié)點(diǎn)集群組中的成員情況,即監(jiān)控加入當(dāng)前集群組中的節(jié)點(diǎn)并在各節(jié)點(diǎn)間傳遞心跳信息,而且可以在接收不到某成員的心跳信息時(shí)將其從集群節(jié)點(diǎn)中移除。Tomcat6中Membership的實(shí)現(xiàn)是org.apache.catalina.tribes.membership.McastService。    15.3、Sender  用于Channel中配置“復(fù)制信息”的發(fā)送器,實(shí)現(xiàn)發(fā)送需要同步給其它節(jié)點(diǎn)的數(shù)據(jù)至集群中的其它節(jié)點(diǎn)。發(fā)送器不需要屬性的定義,但可以在其內(nèi)部定義一個(gè)Transport元素。    15.4 Transport  用于Sender內(nèi)部,配置數(shù)據(jù)如何發(fā)送至集群中的其它節(jié)點(diǎn)。Tomcat6有兩種Transport的實(shí)現(xiàn):  1) PooledMultiSender  基于Java阻塞式IO,可以將一次將多個(gè)信息并發(fā)發(fā)送至其它節(jié)點(diǎn),但一次只能傳送給一個(gè)節(jié)點(diǎn)。  2)PooledParallelSener  基于Java非阻塞式IO,即NIO,可以一次發(fā)送多個(gè)信息至一個(gè)或多個(gè)節(jié)點(diǎn)。    15.5 Receiver  用于Channel定義某節(jié)點(diǎn)如何從其它節(jié)點(diǎn)的Sender接收復(fù)制數(shù)據(jù),Tomcat6中實(shí)現(xiàn)的接收方式有兩種BioReceiver和NioReceiver。    二、web.xml文件  web.xml基于Java Servlet規(guī)范,可被用于每一個(gè)Java servlet容器,通常有兩個(gè)存放位置,$CATALINA_BASE/conf和每個(gè)Web應(yīng)用程序(通常是WEB-INF/web.xml)。Tomcat在deploy一個(gè)應(yīng)用程序時(shí)(包括重啟或重新載入),它首先讀取conf/web.xml,而后讀取WEB-INF/web.xml。    啟用manager功能:  編輯tomcat-user.xml,添加如下行:            而后重啟tomcat。    啟用host-manager和server status功能:        startup腳本:  #!/bin/sh  # Tomcat init script for Linux.  #  # chkconfig: 2345 96 14  # description: The Apache Tomcat servlet/JSP container.  JAVA_OPTS='-Xms64m -Xmx128m'  JAVA_HOME=/usr/java/jdk1.7.0_05  CATALINA_HOME=/usr/local/apache-tomcat-7.0.29  export JAVA_HOME CATALINA_HOME  exec $CATALINA_HOME/bin/catalina.sh $*    APR即Apache Portable Runtime,原來是apache2的一個(gè)庫,后來被獨(dú)立成了一個(gè)項(xiàng)目?;诖藥煳募?,Tomcat可以表現(xiàn)出更好的穩(wěn)定性和性能,尤其是Tomcat作為apache的后端Servlet容器時(shí)。    事先安裝apr-devel包,而后編譯安裝tomcat的APR JNI。安裝方法如下:  # cd  $CATALINA_HOME/bin  # tar xf tomcat-native.tar.gz  # cd tomcat-native-1.1.22-src/jni/native/  # ./configure --with-apr=/usr --with-ssl --with-apxs  # make && make install    # echo "/usr/local/apr/lib/" > /etc/ld.so.conf.d/apr.conf  # ldconfig    應(yīng)用程序:  jforum  java center home    配置tomcat啟用Manager        Manager的四個(gè)管理角色:  manager-gui - allows access to the HTML GUI and the status pages  manager-script - allows access to the text interface and the status pages  manager-jmx - allows access to the JMX proxy and the status pages  manager-status - allows access to the status pages only    添加一個(gè)新的Host:  編輯server.xml:                              列出所有Deployed的Web應(yīng)用程序:  http://{ hostname }:{ portnumber }/manager/list    Tomcat的連接器分為兩類:HTTP連接器和Web服務(wù)器連接器。    Tomcat的HTTP連接器有三種:  1) 基于java的HTTP/1.1連接器,這也是Tomcat6默認(rèn)使用的連接器,即Coyote;它是Tomcat作為standalone模式工作時(shí)所用到的連接器,可直接響應(yīng)來自用戶瀏覽器的關(guān)于JSP、servlet和HTML的請求;此連接器是一個(gè)Java類,定義在server.xml當(dāng)中,默認(rèn)使用8080端口;  2) Java開發(fā)的高性能NIO HTTP/1.1連接器,它支持非阻塞式IO和Comnet,在基于庫向tomcat發(fā)起請求時(shí),此連接器表現(xiàn)不俗;但其實(shí)現(xiàn)不太成熟,有嚴(yán)重bug存在;  3) C/C++開發(fā)的native APR HTTP/1.1連接器;在負(fù)載較大的場景中,此連接器可以提供非常好的性能;APR即Apache Portable Runtime,它是一個(gè)能讓開發(fā)者采用與平臺無關(guān)的風(fēng)格的方式來開發(fā)C/C++代碼本地庫,它能夠很好的跨Windows,     Linux和*nix平臺工作。此連接器從三個(gè)主要方面優(yōu)化了系統(tǒng)性能并提升了系統(tǒng)的伸縮能力:(1)使用sendfile()內(nèi)核模式調(diào)用發(fā)送大的靜態(tài)文件;(2) 僅使用一個(gè)native code保持大量的連接;(3) 使用能夠加速SSL請求處理的OpenSSL本地代碼;    啟用APR連接器的條件:  1) 將連接器的protocol屬性設(shè)定為org.apache.coyote.http11.Http11AprProtocol;  2) APR的庫文件已經(jīng)在系統(tǒng)庫文件的搜索路徑內(nèi);    基于連接器提供Tomcat6性能的方法:  1) 設(shè)置tcpNoDelay屬性值為“true”;  2) 通過maxKeepAliveRequest屬性調(diào)整允許keep-alive功能的請求的最大數(shù)目,值為1時(shí)表示禁用;  3) 調(diào)整socketBuffer屬性的值以改變套接字緩沖的大??;  4) 將enableLookups設(shè)置為false以禁用DNS反解;  5) Tomcat是一個(gè)多線程的Servlet容器,使用線程池能對服務(wù)器性能帶去很大影響;這主要通過maxThreads、maxSpareThreads和minSpareThreads來定義;  6) 通過JAVA_OPTS,如-Xms和-Xmx設(shè)定JVM相關(guān)的參數(shù)以定義其使用內(nèi)存的能力;    AJP(Apache JServ Protocol):  AJP是面向數(shù)據(jù)包的基于TCP/IP的協(xié)議,它在Apache和Tomcat的實(shí)例之間提供了一個(gè)專用的通信信道。目前常用AJP協(xié)議的版本是1.3,它主要有以下特征:  1) 在快速網(wǎng)絡(luò)有著較好的性能表現(xiàn),支持?jǐn)?shù)據(jù)壓縮傳輸;  2) 支持SSL,加密及客戶端證書;  3) 支持Tomcat實(shí)例集群;  4) 支持在apache和tomcat之間的連接的重用;    Apache可以通過mod_jk和mod_proxy模塊跟Tomcat整合,但mod_proxy只有在apache 2.2.x系列的版本才直接提供,但它可以提供更豐富的功能和安全性;而對于apache 1.3.x和2.0.x來說mod_jk才更適用。    配置apache通過mod_proxy模塊與Tomcat連接:    1、檢測當(dāng)前的apache是否支持mod_proxy、mod_proxy_http、mod_proxy_ajp和proxy_balancer_module模塊:  # httpd -D DUMP_MODULES   ……………………   proxy_module (shared)   proxy_balancer_module (shared)   proxy_ftp_module (shared)   proxy_http_module (shared)   proxy_connect_module (shared)   ……………………     2、在httpd.conf的全局配置段或虛擬主機(jī)中添加如下內(nèi)容:  ProxyVia On  ProxyRequests Off  ProxyPreserveHost On      Order deny,allow    Allow from all    ProxyPass /examples/jsp ajp://172.16.100.1:8009/examples/jsp  ProxyPassReverse /examples/jsp ajp://172.16.100.1:8009/examples/jsp      Order allow,deny    Allow from all      配置apache和tomcat一起工作:    1、編譯安裝apache:  # ./configure --prefix=/usr/local/apache --enable-proxy --enable-proxy-http --enable-proxy-ajp    2、配置apache加載相應(yīng)的模塊:  LoadModule proxy_module modules/mod_proxy.so  LoadModule proxy_http_module modules/mod_proxy_http.so  LoadModule proxy_ajp_module modules/mod_proxy_ajp.so    3、配置apache代理tomcat:    第一種方法,基于proxy-http:  ProxyPass /my-webapp http://www.magedu.com:8080/my-webapp  ProxyPassReverse /my-webapp http://www.magedu.com:8080/my-webapp  ProxyVia On    第二種方法,基于proxy-ajp:  ProxyPass /my-webapp ajp://tomcathost:8009/my-webapp  ProxyPassReverse /my-webapp ajp://tomcathost:8009/my-webapp  ProxyVia On    4、確保tomcat配置有如上使用的連接器;    tar xf httpd-2.4.2  cd httpd-2.4.2  ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util  --enable-proxy --enable-proxy-http --enable-proxy-ajp  make && make install     tar xf tomcat-connectors-1.2.37-src.tar.gz   cd tomcat-connectors-1.2.37-src/native/  ./configure --with-apxs=/usr/local/apache/bin/apxs   make && make install    server端session:  1、service向用戶瀏覽器發(fā)送cookie,此cookie包含獲取服務(wù)端session的標(biāo)識。  2、向用戶通過瀏覽器請求同一站點(diǎn)的頁面時(shí),相應(yīng)的cookie信息會隨之發(fā)送。  3、server從cookie信息中識別出與此瀏覽器相關(guān)的session標(biāo)識,從而判別出當(dāng)前server上此瀏覽器的session信息。    在用戶瀏覽器不支持cookie的場景中,也可以基于URL重寫實(shí)現(xiàn)session功能。簡單來講就是server端通過為任何一個(gè)響應(yīng)給用戶的URL附加上session id的方式來標(biāo)識用戶請求。    不過需要注意的是,每個(gè)瀏覽器進(jìn)程都會各自管理各自跟服務(wù)端的會話ID,因此,在服務(wù)器端看來,同一個(gè)客戶端上的多個(gè)瀏覽器進(jìn)程會被識別成不同的客戶端。    2012年7月7號:  Tomcat7的配置文件(conf目錄中):  catalina.policy: Tomcat7的安全策略,用于JVM強(qiáng)制將安全策略施加于Webapp;  catalina.properties: Tomcat啟動(dòng)時(shí)會掃描此文件,它包括共享的server、shared loader及JAR等;  server.xml: 主配置文件之一,包含了諸多的重要配置,如IP地址、端口、虛擬主機(jī)、context路徑等;  tomcat-users.xml: 基于角色實(shí)現(xiàn)的認(rèn)證及授權(quán)相關(guān)的文件;  logging.properties: Tomcat實(shí)例的日志相關(guān)的定義;  web.xml:定義tomcat實(shí)例啟動(dòng)時(shí)為所有裝載至當(dāng)前實(shí)例中的webapp定義的默認(rèn)屬性值;當(dāng)然,某webapp也可以定義自己的屬性來替代這里的默認(rèn)值;  context.xml:     JDBC: (Java Database Connectivity) 基于java的數(shù)據(jù)庫訪問接口, 即用于讓客戶端訪問數(shù)據(jù)庫的API;  JNDI:(Java Naming and Directory Interface), JAVA的API之一,用于向java語言編寫的應(yīng)用程序提供命名及目錄的功能;  DataSource: 用于通過JDBC API連接關(guān)系型數(shù)據(jù)庫的Java對象,通常需要整合進(jìn)JNDI并將數(shù)據(jù)源對象注冊為一個(gè)JNDI的名稱服務(wù);這樣對象可以被程序自身訪問,并用于連接至數(shù)據(jù)庫;一般說來,tomcat7連接至任何數(shù)據(jù)時(shí)通常需要提供以下幾個(gè)參數(shù):    IP地址    端口號    JNDI名稱    數(shù)據(jù)庫用戶名及其密碼  DBCP:(Dababase Connection Pool), 其通常位于TOMCAT_HOME或CATALINA_HOME/lib/tomcat-dbcp.jar中,用于實(shí)現(xiàn)連接池;    Tomcat Manager:  tomcat強(qiáng)大的管理工具,具有以下特性:    遠(yuǎn)程deploy新應(yīng)用程序    清理空閑會話    在不重啟container的情況下Undeploy應(yīng)用程序    分析內(nèi)存泄漏    JVM狀態(tài)    服務(wù)器狀態(tài)      然而,在tomcat7中,TM默認(rèn)是禁用的。要啟用之,需要編輯tomcat-users.xml文件;    Context:  對于應(yīng)用程序來說,context路徑是一個(gè)關(guān)鍵屬性,其也經(jīng)常用于虛擬主機(jī)的配置及.war文件中的URL映射。使用context可以降低系統(tǒng)負(fù)載,因?yàn)?,?dāng)某URL請求到達(dá)tomcat時(shí),如果沒有context,tomcat需要搜索server.xml或context.xml的配置以確定此URL,否則則需要搜索所有的war文件來查找用戶的請求的資源。    此外,context也可以讓管理員基于每個(gè)app提供日志、appBase、DB連接等配置,這極大地增強(qiáng)配置的靈活性;    應(yīng)用程序目錄的結(jié)構(gòu):  /WEB-INF/web.xml:包含當(dāng)前webapp的deploy描述符,如所有的servlets和JSP等動(dòng)態(tài)文件的詳細(xì)信息,會話超時(shí)時(shí)間和數(shù)據(jù)源等;因此,其也通常用于定義當(dāng)前webapp特有的資源;  /WEB-INF/classes: 包含所有服務(wù)器端類及當(dāng)前應(yīng)用程序相關(guān)的其它第三方類等;  /WEB-INF/lib: 包含JSP所用到的JAR文件;    用于tomcat的webapp即可以多個(gè)獨(dú)立的文件組成,也可以是jar打包后的單個(gè)文件;這些打包后的文件的擴(kuò)展名可用于判斷其內(nèi)容的類型,如:    EJB通常打包為.jar    webapp通常打包為.war    資源適配器(Resource adapters)通常打包為.rar    企業(yè)級應(yīng)用程序通常打包為.ear,它通常是整合的EJB、webapp及資源適配器文件;    Web服務(wù)通常會打包為.ear或.war;      于是,到底應(yīng)該使用展開格式的文件還是打包為單個(gè)文件的格式,就需要根據(jù)需要進(jìn)行了。一般說來,如果滿足以下場景,就應(yīng)該使用展開后的格式,而非打包格式:  1、需要在將來的某個(gè)時(shí)候更新應(yīng)用程序中的部分內(nèi)容;使用展開的格式可以避免重新deploy應(yīng)用程序;  2、期望使用Tomcat Manager來動(dòng)態(tài)編輯及選擇deployment descriptor值;  3、應(yīng)用程序中包含靜態(tài)文件,而這些靜態(tài)文件需要定期更新;    Deploy應(yīng)用程序所涉及到的操作:  Deploy: 向tomcat實(shí)例提供某應(yīng)用程序源文件,并讓服務(wù)器將類加載進(jìn)類加器中;這樣,應(yīng)用程序才可以為用戶所使用;  Redeploy:用于更新deployment后的某應(yīng)用程序或應(yīng)用程序的部分內(nèi)容;當(dāng)redeploy整個(gè)應(yīng)用程序時(shí),當(dāng)前應(yīng)用程序的所有模塊都必須要redeploy成功,否則整個(gè)webapp將會停止 ;  Stop: 卸載當(dāng)前應(yīng)用程序的所有類,并停止向用戶提供服務(wù);不過,其仍然會保留所有已deploy的文件及名稱,并可用于后續(xù)的redeployment或starting;  Start: 重新裝載當(dāng)前應(yīng)用的類至類加載器,并開啟服務(wù);  Undeploy: 停止某已經(jīng)deploy的應(yīng)用程序,并移除deploy產(chǎn)生的文件和名稱;    Tomcat7 deploy應(yīng)用程序的方法:  War格式的應(yīng)用程序:將應(yīng)用程序war文件放置于CATALINA_BASE目錄中并重新啟動(dòng)tomcat;  沒打包的應(yīng)用程序:將應(yīng)用程序的非歸檔文件旋轉(zhuǎn)于CATALINA_BASE目錄中;  Tomcat Manager:登錄TM而后進(jìn)行deploy;    telnet webserver    GET / HTTP/1.1  HOST:localhost  Connection:{Keep-Alive|Close}    <%@ page language="java" %>  <%@ page import="java.util.*" %>      <% out.println("Hello,world!"); %>    # mkdir /usr/local/tcinstance2  # cd /usr/local/tcinstance2  # cp -a $CATALINA_HOME/conf .  # mkdir common logs temp server shared webapps work    server.xml:          # set CATALINA_BASE="/usr/local/tcinstance2"  # set CATALINA_HOME="/usr/local/tomcat"  # export CATALINA_BASE CATALINA_HOME  # service tomcat start # Standard way to start on Linux    http://172.16.100.1/manager/html:   http://172.16.100.1/manager/text  http://172.16.100.1/manager/status    會話管理:  標(biāo)準(zhǔn)會話管理器和持久會話管理器    標(biāo)準(zhǔn)會話管理器(StandardManager):      默認(rèn)保存于$CATALINA_HOME/work/Catalina///下的SESSIONS.ser文件中。    maxActiveSessions:最多允許的活動(dòng)會話數(shù)量,默認(rèn)為-1,表示不限制;   maxInactiveInterval:非活動(dòng)的會話超時(shí)時(shí)長,默認(rèn)為60s;  pathname:會話文件的保存目錄;    持久會話管理器(PersistentManager):  將會話數(shù)據(jù)保存至持久存儲中,并且能在服務(wù)器意外中止后重新啟動(dòng)時(shí)重新加載這些會話信息。持久會話管理器支持將會話保存至文件存儲(FileStore)或JDBC存儲(JDBCStore)中。    保存至文件中的示例:            每個(gè)用戶的會話會被保存至directory指定的目錄中的文件中,文件名為.session,并通過后臺線程每隔一段時(shí)間(checkInterval參數(shù)定義,默認(rèn)為60秒)檢查一次超時(shí)會話。    保存至JDBCStore中的示例:            安裝apache    6.4.1 安裝apr和apr-util    可以從http://apr.apache.org/獲取apr源碼,目前最新的版本是1.4.6。  [root@www.magedu.com  ~]# tar  xf  apr-1.4.6.tar.bz2  [root@www.magedu.com  ~]# cd apr-1.4.6  [root@www.magedu.com  ~]# ./configure --prefix=/usr/local/apr --disable-ipv6  [root@www.magedu.com  ~]# make && make install    apr-util是apr的工具庫,其可以讓程序員更好的使用apr的功能。可以從http://apr.apache.org/獲取apr源碼,目前最新的版本是1.4.1。  [root@www.magedu.com  ~]# tar xf apr-util-1.4.1.tar.bz2  [root@www.magedu.com  ~]# cd apr-util-1.4.1  [root@www apr-util-1.4.1]#  ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr  [root@www apr-util-1.4.1]#  make && make install    6.4.2 安裝apache    httpd目前最新的2.4系列版本中引入了event MPM,其在性能上較之其它MPM有了較大的提升,  [root@www.magedu.com  ~]# tar xf httpd-2.4.2  [root@www.magedu.com  ~]# cd httpd-2.4.2  [root@www.magedu.com  ~]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer  --enable-lbmethod-heartbeat --enable-heartbeat --enable-slotmem-shm  --enable-slotmem-plain --enable-watchdog  [root@www.magedu.com  ~]# make && make install    為apache提供init腳本,實(shí)現(xiàn)服務(wù)的控制。建立/etc/rc.d/init.d/httpd文件,并添加如下內(nèi)容:    這是個(gè)腳本文件,因此需要執(zhí)行權(quán)限;同時(shí),為了讓httpd服務(wù)能夠開機(jī)自動(dòng)啟動(dòng),還需要將其添加至服務(wù)列表,并設(shè)置其在3或5級別下自動(dòng)運(yùn)行。  chmod  +x  /etc/rc.d/init.d/httpd  chkconfig  --add  httpd  chkconfig  --level  35  httpd  on    6.5  配置apache通過mod_proxy模塊與Tomcat連接    要使用mod_proxy與Tomcat實(shí)例連接,需要apache已經(jīng)裝載mod_proxy、mod_proxy_http、mod_proxy_ajp和proxy_balancer_module(實(shí)現(xiàn)Tomcat集群時(shí)用到)等模塊:    # /usr/local/apache/bin/httpd -D DUMP_MODULES | grep  proxy   proxy_module (shared)   proxy_connect_module (shared)   proxy_ftp_module (shared)   proxy_http_module (shared)   proxy_fcgi_module (shared)   proxy_scgi_module (shared)   proxy_ajp_module (shared)   proxy_balancer_module (shared)   proxy_express_module (shared)     2、在httpd.conf的全局配置段或虛擬主機(jī)中添加如下內(nèi)容:  ProxyVia Off  ProxyRequests Off  ProxyPreserveHost Off      Require all granted      ProxyPass  /  ajp://172.16.100.1:8009/    ProxyPassReverse  /  ajp://172.16.100.1:8009/      Require all granted      或讓apache跟Tomcat的http連接器進(jìn)行整合:  ProxyVia Off  ProxyRequests Off  ProxyPass / http://172.16.100.1:8080/  ProxyPassReverse / http://172.16.100.1:8080/      Require all granted        Require all granted      關(guān)于如上apache指令的說明:    ProxyPreserveHost {On|Off}:如果啟用此功能,代理會將用戶請求報(bào)文中的Host:行發(fā)送給后端的服務(wù)器,而不再使用ProxyPass指定的服務(wù)器地址。如果想在反向代理中支持虛擬主機(jī),則需要開啟此項(xiàng),否則就無需打開此功能。    ProxyVia  {On|Off|Full|Block}:用于控制在http首部是否使用Via:,主要用于在多級代理中控制代理請求的流向。默認(rèn)為Off,即不啟用此功能;On表示每個(gè)請求和響應(yīng)報(bào)文均添加Via:;Full表示每個(gè)Via:行都會添加當(dāng)前apache服務(wù)器的版本號信息;Block表示每個(gè)代理請求報(bào)文中的Via:都會被移除。    ProxyRequests {On|Off}:是否開啟apache正向代理的功能;啟用此項(xiàng)時(shí)為了代理http協(xié)議必須啟用mod_proxy_http模塊。同時(shí),如果為apache設(shè)置了ProxyPass,則必須將ProxyRequests設(shè)置為Off。    ProxyPass  [path]  !|url  [key=value key=value ...]]:將后端服務(wù)器某URL與當(dāng)前服務(wù)器的某虛擬路徑關(guān)聯(lián)起來作為提供服務(wù)的路徑,path為當(dāng)前服務(wù)器上的某虛擬路徑,url為后端服務(wù)器上某URL路徑。使用此指令時(shí)必須將ProxyRequests的值設(shè)置為Off。需要注意的是,如果path以“/”結(jié)尾,則對應(yīng)的url也必須以“/”結(jié)尾,反之亦然。  另外,mod_proxy模塊在httpd 2.1的版本之后支持與后端服務(wù)器的連接池功能,連接在按需創(chuàng)建在可以保存至連接池中以備進(jìn)一步使用。連接池大小或其它設(shè)定可以通過在ProxyPass中使用key=value的方式定義。常用的key如下所示:  ◇ min:連接池的最小容量,此值與實(shí)際連接個(gè)數(shù)無關(guān),僅表示連接池最小要初始化的空間大小。  ◇ max:連接池的最大容量,每個(gè)MPM都有自己獨(dú)立的容量;都值與MPM本身有關(guān),如Prefork的總是為1,而其它的則取決于ThreadsPerChild指令的值。  ◇ loadfactor:用于負(fù)載均衡集群配置中,定義對應(yīng)后端服務(wù)器的權(quán)重,取值范圍為1-100。  ◇ retry:當(dāng)apache將請求發(fā)送至后端服務(wù)器得到錯(cuò)誤響應(yīng)時(shí)等待多長時(shí)間以后再重試。單位是秒鐘。    如果Proxy指定是以balancer://開頭,即用于負(fù)載均衡集群時(shí),其還可以接受一些特殊的參數(shù),如下所示:  ◇lbmethod:apache實(shí)現(xiàn)負(fù)載均衡的調(diào)度方法,默認(rèn)是byrequests,即基于權(quán)重將統(tǒng)計(jì)請求個(gè)數(shù)進(jìn)行調(diào)度,bytraffic則執(zhí)行基于權(quán)重的流量計(jì)數(shù)調(diào)度,bybusyness通過考量每個(gè)后端服務(wù)器的當(dāng)前負(fù)載進(jìn)行調(diào)度。  ◇ maxattempts:放棄請求之前實(shí)現(xiàn)故障轉(zhuǎn)移的次數(shù),默認(rèn)為1,其最大值不應(yīng)該大于總的節(jié)點(diǎn)數(shù)。  ◇ nofailover:取值為On或Off,設(shè)置為On時(shí)表示后端服務(wù)器故障時(shí),用戶的session將損壞;因此,在后端服務(wù)器不支持session復(fù)制時(shí)可將其設(shè)置為On。  ◇ stickysession:調(diào)度器的sticky session的名字,根據(jù)web程序語言的不同,其值為JSESSIONID或PHPSESSIONID。  上述指令除了能在banlancer://或ProxyPass中設(shè)定之外,也可使用ProxySet指令直接進(jìn)行設(shè)置,如:    BalancerMember  http://www1.magedu.com:8080 loadfactor=1  BalancerMember  http://www2.magedu.com:8080 loadfactor=2  ProxySet  lbmethod=bytraffic      ProxyPassReverse:用于讓apache調(diào)整HTTP重定向響應(yīng)報(bào)文中的Location、Content-Location及URI標(biāo)簽所對應(yīng)的URL,在反向代理環(huán)境中必須使用此指令避免重定向報(bào)文繞過proxy服務(wù)器。    6.6  配置apache通過mod_jk模塊與Tomcat連接    mod_jk是ASF的一個(gè)項(xiàng)目,是一個(gè)工作于apache端基于AJP協(xié)議與Tomcat通信的連接器,它是apache的一個(gè)模塊,是AJP協(xié)議的客戶端(服務(wù)端是Tomcat的AJP連接器)。    [root@www.magedu.com  ~]# tar xf tomcat-connectors-1.2.37-src.tar.gz   [root@www.magedu.com  ~]# cd tomcat-connectors-1.2.37-src/native/  [root@www.magedu.com  ~]# ./configure --with-apxs=/usr/local/apache/bin/apxs   [root@www.magedu.com  ~]# make && make install    apache要使用mod_jk連接器,需要在啟動(dòng)時(shí)加載此連接器模塊。為了便于管理與mod_jk模塊相關(guān)的配置,這里使用一個(gè)專門的配置文件/etc/httpd/extra/httpd-jk.conf來保存相關(guān)指令及其設(shè)置。其內(nèi)容如下:  # Load the mod_jk  LoadModule  jk_module  modules/mod_jk.so  JkWorkersFile  /etc/httpd/extra/workers.properties  JkLogFile  logs/mod_jk.log  JkLogLevel  debug  JkMount  /*  TomcatA  JkMount  /status/  stat1    除了需要使用LoadModule指令在apache中裝載模塊外,mod_jk還需要在apache的主配置文件中設(shè)置其它一些指令來配置其工作屬性。如JkWorkersFile則用于指定保存了worker相關(guān)工作屬性定義的配置文件,JkLogFile則用于指定mod_jk模塊的日志文件,JkLogLevel則可用于指定日志的級別(info, error, debug),此外還可以使用JkRequestLogFormat自定義日志信息格式。而JkMount(格式: JkMount    )指定則用于控制URL與Tomcat workers的對應(yīng)關(guān)系。    為了讓apache能使用/etc/httpd/extra/httpd-jk.conf配置文件中的配置信息,需要編輯/etc/httpd/httpd.conf,添加如下一行:  Include  /etc/httpd/extra/httpd-jk.conf    對于apache代理來說,每一個(gè)后端的Tomcat實(shí)例中的engine都可以視作一個(gè)worker,而每一個(gè)worker的地址、連接器的端口等信息都需要在apache端指定以便apache可以識別并使用這些worker。約定俗成,配置這些信息的文件通常為workers.properties,其具體路徑則是使用前面介紹過的JkWorkersFile指定的,在apache啟動(dòng)時(shí),mod_jk會掃描此文件獲取每一個(gè)worker的配置信息。比如,我們這里使用/etc/httpd/extra/workers.properties。    workers.properties文件一般由兩類指令組成:一是mod_jk可以連接的各worker名稱列表,二是每一個(gè)worker的屬性配置信息。它們分別遵循如下使用語法。    worker.list = < a comma separated list of worker names >  worker.  . =     其中worker.list指令可以重復(fù)指定多次,而worker name則是Tomcat中engine組件jvmRoute參數(shù)的值。如:  worker.TomcatA.host=172.16.100.1    根據(jù)其工作機(jī)制的不同,worker有多種不同的類型,這是需要為每個(gè)worker定義的一項(xiàng)屬性woker..type。常見的類型如下:  ◇ ajp13:此類型表示當(dāng)前worker為一個(gè)運(yùn)行著的Tomcat實(shí)例。  ◇ lb:lb即load balancing,專用于負(fù)載均衡場景中的woker;此worker并不真正負(fù)責(zé)處理用戶請求,而是將用戶請求調(diào)度給其它類型為ajp13的worker。  ◇   status:用戶顯示分布式環(huán)境中各實(shí)際worker工作狀態(tài)的特殊worker,它不處理任何請求,也不關(guān)聯(lián)到任何實(shí)際工作的worker實(shí)例。具體示例如請參見后文中的配置。    worker其它常見的屬性說明:  ◇ host:Tomcat 7的worker實(shí)例所在的主機(jī);  ◇ port:Tomcat 7實(shí)例上AJP1.3連接器的端口;  ◇ connection_pool_minsize:最少要保存在連接池中的連接的個(gè)數(shù);默認(rèn)為pool_size/2;  ◇ connection_pool_timeout:連接池中連接的超時(shí)時(shí)長;  ◇ mount:由當(dāng)前worker提供的context路徑,如果有多個(gè)則使用空格格開;此屬性可以由JkMount指令替代;  ◇ retries:錯(cuò)誤發(fā)生時(shí)的重試次數(shù);  ◇ socket_timeout:mod_jk等待worker響應(yīng)的時(shí)長,默認(rèn)為0,即無限等待;  ◇ socket_keepalive:是否啟用keep alive的功能,1表示啟用,0表示禁用;  ◇ lbfactor:worker的權(quán)重,可以在負(fù)載均衡的應(yīng)用場景中為worker定義此屬性;    另外,在負(fù)載均衡模式中,專用的屬性還有:  ◇balance_workers:用于負(fù)載均衡模式中的各worker的名稱列表,需要注意的是,出現(xiàn)在此處的worker名稱一定不能在任何worker.list屬性列表中定義過,并且worker.list屬性中定義的worker名字必須包含負(fù)載均衡worker。具體示例請參見后文中的定義。  ◇ method:可以設(shè)定為R、T或B;默認(rèn)為R,即根據(jù)請求的個(gè)數(shù)進(jìn)行調(diào)度;T表示根據(jù)已經(jīng)發(fā)送給worker的實(shí)際流量大小進(jìn)行調(diào)度;B表示根據(jù)實(shí)際負(fù)載情況進(jìn)行調(diào)度。  ◇sticky_session:在將某請求調(diào)度至某worker后,源于此址的所有后續(xù)請求都將直接調(diào)度至此worker,實(shí)現(xiàn)將用戶session與某worker綁定。默認(rèn)為值為1,即啟用此功能。如果后端的各worker之間支持session復(fù)制,則可以將此屬性值設(shè)為0。    根據(jù)前文中的指定,這里使用/etc/httpd/extra/workers.properties來定義一個(gè)名為TomcatA的worker,并為其指定幾個(gè)屬性。文件內(nèi)容如下:  worker.list=TomcatA,stat1  worker.TomcatA.port=8009  worker.TomcatA.host=172.16.100.1  worker.TomcatA.type=ajp13  worker.TomcatA.lbfactor=1  worker.stat1.type = status    至此,一個(gè)基于mod_jk模塊與后端名為TomcatA的worker通信的配置已經(jīng)完成,重啟httpd服務(wù)即可生效。    配置基于mod_jk的負(fù)載均衡    1、  為了避免用戶直接訪問后端Tomcat實(shí)例,影響負(fù)載均衡的效果,建議在Tomcat 7的各實(shí)例上禁用HTTP/1.1連接器。  2、為每一個(gè)Tomcat 7實(shí)例的引擎添加jvmRoute參數(shù),并通過其為當(dāng)前引擎設(shè)置全局惟一標(biāo)識符。如下所示。需要注意的是,每一個(gè)實(shí)例的jvmRoute的值均不能相同。      而后去配置apache,修改/etc/httpd/extra/httpd-jk.conf為如下內(nèi)容:  LoadModule  jk_module  modules/mod_jk.so  JkWorkersFile  /etc/httpd/extra/workers.properties  JkLogFile  logs/mod_jk.log  JkLogLevel  debug  JkMount  /*  lbcluster1  JkMount  /jkstatus/  stat1    編輯/etc/httpd/extra/workers.properties,添加如下內(nèi)容:  worker.list = lbcluster1,stat1  worker.TomcatA.type = ajp13  worker.TomcatA.host = 172.16.100.1  worker.TomcatA.port = 8009  worker.TomcatA.lbfactor = 5  worker.TomcatB.type = ajp13  worker.TomcatB.host = 172.16.100.2  worker.TomcatB.port = 8009  worker.TomcatB.lbfactor = 5  worker.lbcluster1.type = lb  worker.lbcluster1.sticky_session = 1  worker.lbcluster1.balance_workers = TomcatA, TomcatB  worker.stat1.type = status    演示效果,在TomcatA上某context中(如/test),提供如下頁面  <%@ page language="java" %>

      TomcatA

      <% session.setAttribute("abc","abc"); %>
       Session ID<%= session.getId() %> 
       

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號