整合Apache中JSP和PHP
我們最希望任何事都是***的,如在企業(yè)應(yīng)用中,我們只需要選擇一個(gè)Web平臺(tái)就可以部署所有的企業(yè)應(yīng)用。但往往理想與現(xiàn)實(shí)相去甚遠(yuǎn)。在現(xiàn)實(shí)世界中,信息系統(tǒng)往往是由很多不同的操作系統(tǒng)、平臺(tái)以及應(yīng)用環(huán)境混合而成的。而且為了保持與舊的系統(tǒng)兼容,系統(tǒng)總是將當(dāng)前的技術(shù)和以前的遺留技術(shù)進(jìn)行混合,這樣周而復(fù)始。就使系統(tǒng)變得越來(lái)越復(fù)雜。
對(duì)于這樣的惡性變化會(huì)使很多人疲于奔命,尤其是開發(fā)人員,他們將面臨幾乎令人崩潰般的挑戰(zhàn)。尤其是要將兩個(gè)或更多的技術(shù)部署在同一個(gè)應(yīng)用時(shí)更是如此。如本文要給出的例子中,就是將PHP和JSP程序同時(shí)部署在運(yùn)行于Apache中的同一個(gè)應(yīng)用程序中。在這個(gè)例子中,將提供一種方法來(lái)快速地部署這兩種Web程序。開發(fā)人員也可以借鑒這種方法來(lái)處理其他類似的難題。
也許有很多人會(huì)問,我應(yīng)該如做也能將基于PHP和JSP的Web程序部署在同一個(gè)Web應(yīng)用程序中呢?下面我就來(lái)回答這個(gè)問題。這個(gè)問題的基本答案就是先將apache配置成PHP Web服務(wù)器,并使用Apache處理所有的PHP/CGI請(qǐng)求,同時(shí)使用Tomcat處理所有的其他請(qǐng)求(包括JSP請(qǐng)求)。在開始之前,讓我們先看看需要哪些軟件:
完成本文的例子需要三個(gè)軟件:
1. Apache HTTP Server
2. Apache Tomcat
3. Apache Tomcat Connectors
一.解決方案所使用的技術(shù)
對(duì)于上述的問題,我們有幾個(gè)解決方案可以考慮。這些解決方案如下所示:
1. 使Apache服務(wù)器作為主要的或默認(rèn)的請(qǐng)求處理器,只傳遞Servlet/JSP請(qǐng)求給Java容器。
2. 將Java容器作為主要或默認(rèn)的請(qǐng)求處理器,只允許PHP/CGI請(qǐng)求由Apache處理。
3. 不使用Apache,并在Tomcat中運(yùn)行PHP/CGI程序。
上述的前兩種解決方案類似。這兩種方法都是將大量的請(qǐng)求引入某一個(gè)服務(wù)器(Tomcat或Apache),然后使用別外的服務(wù)器處理個(gè)別的請(qǐng)求(PHP和JSP)。第三種方法雖然看起來(lái)比較簡(jiǎn)單,很誘人。但Apache處理PHP時(shí)的效率是非常高的,并且提供了更安全的機(jī)制,因此,Tomcat并不合適處理PHP程序。
在本文中我們將采用第二種方案,就是將Tomcat作為主要的Web服務(wù)器來(lái)接收大部分請(qǐng)求,同時(shí)Apache作為后備服務(wù)器來(lái)處理PHP/CGI請(qǐng)求,它們的關(guān)系如圖1所示。如果讀者對(duì)***種方法情有獨(dú)衷,可以很容易地根據(jù)第二種方法來(lái)設(shè)置。
圖1 Tomcat作為主要的請(qǐng)求處理器,Apache作為輔助請(qǐng)求處理器
二.發(fā)布應(yīng)用程序
一查我們對(duì)環(huán)境進(jìn)行了正確的配置,我們就可以將應(yīng)用程序打包并發(fā)布到Web服務(wù)器了。將應(yīng)用程序發(fā)布到Apache上和發(fā)布到Tomcat上沒什么不同,都需要建立一個(gè)WEB-INF/web.xml文件,所不同的是如果請(qǐng)求的是PHP或CGI程序,將繞過Tomcat直接傳給Apache處理。
盡管改變Apache的根目錄(默認(rèn)是'dtdocs')對(duì)于發(fā)布應(yīng)用程序并不方便。但我們可以將Apache的根目錄指向Tomcat的發(fā)布目錄。這樣 PHP/CGI就可以和JSP打在同一個(gè)WAR/EAR包中。我們只要簡(jiǎn)單地目錄中放置HTML.PHP和JSP頁(yè)即可完成發(fā)布。這對(duì)于開發(fā),還是測(cè)試都是非常方便的。
另外,將PHP和JSP和CGI發(fā)布到同一個(gè)目錄中還可以使它們共享相同的支持文件(CSS、JS、images等)的內(nèi)容。還有,這個(gè)模型提供了一個(gè)Web應(yīng)用程序的完整結(jié)構(gòu),以及從Java Web目錄中調(diào)用PHP/CGI程序變得更簡(jiǎn)單(相對(duì)而言)。
三.總結(jié)
無(wú)論你在工作中是否被要求集成遺留的Web應(yīng)用程序到新的Web程序中,或是將某個(gè)開源系統(tǒng)加進(jìn)定制的Web應(yīng)用中,或簡(jiǎn)單地將兩個(gè)不同的Web應(yīng)用集成到一起,你都有可能將不同的技術(shù)集成到同一個(gè)Web應(yīng)用中??傊痪湓?,將不同的技術(shù)轉(zhuǎn)換到同一種技術(shù)平臺(tái)上是***的解決方案
【編輯推薦】