Tomcat開(kāi)發(fā)技術(shù)之與HTTP服務(wù)器的集成 (1)
作者:孫衛(wèi)琴 發(fā)文時(shí)間:2005.06.07
Tomcat最主要的功能是提供Servlet/JSP容器,盡管它也可以作為獨(dú)立的Java Web服務(wù)器,它在對(duì)靜態(tài)資源(如HTML文件或圖像文件)的處理速度,以及提供的Web服務(wù)器管理功能方面都不如其他專(zhuān)業(yè)的HTTP服務(wù)器,如IIS和Apache服務(wù)器。
因此在實(shí)際應(yīng)用中,常常把Tomcat與其他HTTP服務(wù)器集成。對(duì)于不支持Servlet/JSP的HTTP服務(wù)器,可以通過(guò)Tomcat服務(wù)器來(lái)運(yùn)行Servlet/JSP組件。
當(dāng)Tomcat與其他HTTP服務(wù)器集成時(shí),Tomcat服務(wù)器的工作模式通常為進(jìn)程外的Servlet容器,Tomcat服務(wù)器與其他HTTP服務(wù)器之間通過(guò)專(zhuān)門(mén)的插件來(lái)通信。關(guān)于Tomcat服務(wù)器的工作模式的概念可以參考本書(shū)1.4節(jié)。
本章首先討論Tomcat與HTTP服務(wù)器集成的一般原理,然后介紹Tomcat與Apache以及IIS集成的詳細(xì)步驟。
22.1 Tomcat與HTTP服務(wù)器集成的原理
Tomcat服務(wù)器通過(guò)Connector連接器組件與客戶程序建立連接,Connector組件負(fù)責(zé)接收客戶的請(qǐng)求,以及把Tomcat服務(wù)器的響應(yīng)結(jié)果發(fā)送給客戶。默認(rèn)情況下,Tomcat在server.xml中配置了兩種連接器:
<!-- Define a non-SSL Coyote HTTP/1.1Connector on port 8080 --> <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" /> <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 --> <Connector port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />
第一個(gè)連接器監(jiān)聽(tīng)8080端口,負(fù)責(zé)建立HTTP連接。在通過(guò)瀏覽器訪問(wèn)Tomcat服務(wù)器的Web應(yīng)用時(shí),使用的就是這個(gè)連接器。
第二個(gè)連接器監(jiān)聽(tīng)8009端口,負(fù)責(zé)和其他的HTTP服務(wù)器建立連接。在把Tomcat與其他HTTP服務(wù)器集成時(shí),就需要用到這個(gè)連接器。
Web客戶訪問(wèn)Tomcat服務(wù)器上JSP組件的兩種方式如圖22-1所示。
圖22-1 Web客戶訪問(wèn)Tomcat服務(wù)器上的JSP組件的兩種方式
在圖22-1中,Web客戶1直接訪問(wèn)Tomcat服務(wù)器上的JSP組件,他訪問(wèn)的URL為http://localhost:8080/index.jsp。Web客戶2通過(guò)HTTP服務(wù)器訪問(wèn)Tomcat服務(wù)器上的JSP組件。假定HTTP服務(wù)器使用的HTTP端口為默認(rèn)的80端口,那么Web客戶2訪問(wèn)的URL為http://localhost:80/index.jsp 或者 http://localhost/index.jsp。
下面,介紹Tomcat與HTTP服務(wù)器之間是如何通信的。
22.1.1 JK插件
Tomcat提供了專(zhuān)門(mén)的JK插件來(lái)負(fù)責(zé)Tomcat和HTTP服務(wù)器的通信。應(yīng)該把JK插件安置在對(duì)方的HTTP服務(wù)器上。當(dāng)HTTP服務(wù)器接收到客戶請(qǐng)求時(shí),它會(huì)通過(guò)JK插件來(lái)過(guò)濾URL,JK插件根據(jù)預(yù)先配置好的URL映射信息,決定是否要把客戶請(qǐng)求轉(zhuǎn)發(fā)給Tomcat服務(wù)器處理。
假定在預(yù)先配置好的URL映射信息中,所有"/*.jsp"形式的URL都由Tomcat服務(wù)器來(lái)處理,那么在圖22-1的例子中,JK插件將把客戶請(qǐng)求轉(zhuǎn)發(fā)給Tomcat服務(wù)器,Tomcat服務(wù)器于是運(yùn)行index.jsp,然后把響應(yīng)結(jié)果傳給HTTP服務(wù)器,HTTP服務(wù)器再把響應(yīng)結(jié)果傳給Web客戶2。
對(duì)于不同的HTTP服務(wù)器,Tomcat提供了不同的JK插件的實(shí)現(xiàn)模塊。本章將用到以下JK插件:
與Windows下的Apache HTTP服務(wù)器集成:mod_jk_2.0.46.dll
與Linux(RedHet)下的Apache HTTP服務(wù)器集成:mod_jk.so-ap2.0.46-rh72..46-rh72
與IIS服務(wù)器集成:isapi_redirect.dll