開始之前
本教程面向那些希望在 Web 應(yīng)用程序開發(fā)中快速集成 PHP 和 Java? 的 AIX? 5.3 開發(fā)人員。在本教程中,您將完成一個解決方案的構(gòu)建過程,其中使用 PHP 作為前端,而使用問卷調(diào)查應(yīng)用程序的 Java 類作為后端。在您研究后端 Java 類的 PHP 接口的最終解決方案之前,您還將研究 Web 服務(wù)和 PHP Java Bridge 接口之間的區(qū)別、以及 PHP 和 Java 開發(fā)方法之間的區(qū)別。您應(yīng)該具有基本的 Java 編程能力,并對基本的 Web 開發(fā)環(huán)境有所了解。
關(guān)于本系列
PHP 是一種非常優(yōu)秀的 Web 開發(fā)語言,而在商業(yè)應(yīng)用程序開發(fā)方面,Java 編程語言十分流行。因此,為了在 AIX Version 5.3 操作系統(tǒng)上充分利用它們的優(yōu)勢,專門開發(fā)了 PHP Java Bridge。本系列文章向 AIX 5.3 開發(fā)人員介紹了如何在他們的 Web 應(yīng)用程序開發(fā)中集成 PHP 和 Java 技術(shù)。
為了說明這一點,您將按照典型的開發(fā)過程來構(gòu)建一個簡單的問卷調(diào)查應(yīng)用程序,具體內(nèi)容包括:
開發(fā)主要的 Java 應(yīng)用程序
通過 Servlet 將 Java 應(yīng)用程序公開為基于 Java 的 Web 應(yīng)用程序
添加在數(shù)據(jù)庫中存儲信息的支持
將原始應(yīng)用程序公開為 Web Services,并為該應(yīng)用程序提供 PHP 接口
使用專門的 PHP Java Bridge 重新開發(fā) PHP 接口
本系列文章共分為六個部分:
第 1 部分介紹了一個應(yīng)用程序,并為構(gòu)建 Java 應(yīng)用程序以及使用 Tomcat 執(zhí)行基于 Java 的 Web 應(yīng)用程序搭建了相應(yīng)的環(huán)境。
第 2 部分介紹了主要的應(yīng)用程序代碼以及一個簡單的 Java Servlet 的開發(fā),以便為信息提供一個 Web 接口。
第 3 部分將核心應(yīng)用程序連接到 DB2? 數(shù)據(jù)庫,以便對問卷調(diào)查的問題和回答進行存儲。
第 4 部分對原始應(yīng)用程序進行轉(zhuǎn)換,使其能夠作為 Web Services 進行訪問,并且它為 PHP 接口提供了基礎(chǔ)。
第 5 部分使用 PHP Java Bridge 為 Java 應(yīng)用程序構(gòu)建 PHP 接口。
第 6 部分對這個應(yīng)用程序進行重新開發(fā),以便使用 PHP Java Bridge 來代替 Web Services 接口。
關(guān)于本教程
本教程是這個系列文章的最后一個部分,在本教程中,您將了解如何組合使用 PHP 和 Java 技術(shù),以便為支持問卷調(diào)查應(yīng)用程序的原始 Java 類構(gòu)建 Web 接口。這個最終解決方案使用 PHP Java Bridge 以使得您可以為在本系列文章的前面幾個部分中所開發(fā)的 Java 類構(gòu)建基于 PHP 的接口。
您首先將了解 PHP Java Bridge、以及它的操作與最初開發(fā)的 Web 服務(wù)方法之間的區(qū)別,從而對這幾種不同的技術(shù)進行比較。然后,在研究原始 Java 類的 PHP 接口的最終備選方法之前,您將研究幾種不同的集成您的基于 PHP 和 Java 的解決方案。
先決條件
為了學(xué)習(xí)本教程,您需要安裝下列軟件:
IBM pSerIEs? 服務(wù)器(本文中的代碼使用 AIX Version 5.3 進行了測試。)
Apache Tomcat 系統(tǒng)
Eclipse IDE
Java 5 64-bit SDK(要下載這個包,您需要進行注冊,但注冊是免費的。)
Mozilla Web browser for AIX
幾種不同連接技術(shù)的比較
問卷調(diào)查應(yīng)用程序所使用的 Web 服務(wù)方法為您提供了極大的靈活性,而 PHP Java Bridge 以不同的方式提供了類似的靈活性。在您更深入地研究開發(fā)過程之前,讓我們更仔細地分析一下它們之間的區(qū)別和相似之處。
Web 服務(wù)方法
您對原始應(yīng)用程序進行了轉(zhuǎn)換,這樣一來,在本系列文章的第四部分中(請參見參考資料),就可以將其作為 Web Services 進行訪問。除了可訪問性之外,Web Services 模型還具有許多其它的優(yōu)點。通過 Web Services 接口來公開類,您可以保證互操作性,因為幾乎所有的語言都支持某些形式的 Web Services ,無論是 XML-RPC 還是簡單對象訪問協(xié)議 (SOAP)。
這也就帶來了極大的靈活性。現(xiàn)在,您的 Java 后端可以由采用 C、Perl、Java 語言、PHP、JavaScript 和許多其他編程語言所編寫的腳本和應(yīng)用程序來進行訪問;然而,實現(xiàn)互操作性是要付出一定代價的。
正如您在本系列文章的第四部分中所看到的,將您的應(yīng)用程序公開為 Web Services 是一項復(fù)雜的任務(wù)。要正確地完成這項工作,需要通過 Web 服務(wù)描述語言 (WSDL) 文件開發(fā)和部署您的代碼;然后,您必須單獨地為每個函數(shù)定義不同的接口,同時還需要確保采用與您希望使用的標(biāo)準(zhǔn)可互操作的格式,對所提供的值和返回的值進行編碼和封裝。
在您為核心類開發(fā)和添加新的功能和擴展時,所有的這些工作都需要花費大量的時間進行開發(fā)、以及較長的時間進行控制。要使得原始類能夠通過 Web 服務(wù)接口進行訪問,可能會使得您的開發(fā)時間增加 20% 到 50%。
而且,正如稍后將更詳細地進行介紹的,Web 服務(wù)方法還隱含了不容忽視的顯著性能開銷(如果您希望在大型操作環(huán)境中部署該應(yīng)用程序的話)。
PHP Java Bridge
在本系列文章的第五部分中,您詳細地了解了 PHP Java Bridge(請參見參考資料),但是 PHP Java Bridge 的關(guān)鍵元素允許您直接從 PHP 內(nèi)部訪問 Java 類,就好像您正在訪問本地 PHP 類一樣。
盡管 Web 服務(wù)和 PHP Java Bridge 接口在本質(zhì)上存在很大的差別,但事實上,它們都使用 XML 進行通信,以交換有關(guān)原始方法和類、以及應(yīng)該如何對它們進行訪問的信息。與 Web 服務(wù)解決方案有所不同,這個過程是自動的。
正如您在第五部分中所看到的(請參見參考資料)、以及本文清單 1 中所介紹的,在您導(dǎo)入 PHP 元素、并且創(chuàng)建到遠程 Java 主機的連接之后,使用和創(chuàng)建 Java 類和對象是非常簡單的。
清單 1. 簡單的 PHP Java Bridge 的示例
<? require_once("http://sulaco.mcslp.pri:8080/JavaBridge/java/Java.inc"); $System = new Java("java.lang.System"); print_r($System->getProperties); ?> |
在本教程后面的內(nèi)容中,您將研究所需的確切的方法和解決方案。
區(qū)別和相似之處
Web Services 和 PHP Java 解決方案之間存在許多明顯的區(qū)別和相似之處,從而使得采用這兩種方法開發(fā)和部署應(yīng)用程序時具有相應(yīng)的優(yōu)點和缺點。
例如,Web 服務(wù)和 PHP Java Bridge 解決方案都允許您使用 PHP 作為前端、使用 Java 環(huán)境作為應(yīng)用程序的后端部分。對于 Web 服務(wù)解決方案,您必須開發(fā)原始類、Web 服務(wù)類和 PHP 接口。對于 PHP Java Bridge,您只需要開發(fā)原始 Java 類和 PHP 前端,PHP Java Bridge 可以為您處理所有的互操作性問題。
在 Web 服務(wù)和 PHP Java Bridge 解決方案之間還存在一個比較顯著的區(qū)別,即完成解決方案所需的步驟有所不同。Web 服務(wù)解決方案需要額外的開發(fā)時間,以使用所需的 Web 服務(wù)接口來公開服務(wù)、并使得它們可供使用。在 PHP 中使用 Web 服務(wù)也是相當(dāng)繁瑣的,因為您必須開發(fā)一個能夠為已開發(fā)的 Web 服務(wù)接口提供接口的解決方案。
對于 PHP Java Bridge,您可以直接訪問現(xiàn)有的 Java 類,而不必在 Java 端顯式地開發(fā)接口、或者在 PHP 端顯式地開發(fā)訪問接口。
性能
為了將您的原始請求轉(zhuǎn)換為完全與平臺無關(guān)的形式,使用 Web 服務(wù)的關(guān)鍵問題之一是必須將請求轉(zhuǎn)換為 XML。所得到的 XML 數(shù)據(jù)包中包括請求、源或目標(biāo)信息、以及請求中所包含的任何數(shù)據(jù)或者信息(例如,方法或函數(shù)的參數(shù)),這使得 XML 組件的負載變得非常大。
采用這種方式生成有效的 XML 是相當(dāng)花費時間的,但是對該信息進行解碼甚至可能需要花費更多的時間,因為 XML 解析的過程并不像您所預(yù)期的那么簡單和直接。和發(fā)送請求到服務(wù)器的客戶端的負載相比,這個處理過程會呈現(xiàn)更高的負載,隨后還會有接受請求和最后處理請求的過程。在將響應(yīng)發(fā)送回客戶端的時候,將按相反的順序執(zhí)行相同的處理過程(采用 XML 對響應(yīng)進行編碼,發(fā)送到客戶端,客戶端解析 XML 并且提取響應(yīng))。
您可以在圖 1 中更詳細地看到這個過程。
圖 1. 實際應(yīng)用中的 Web 服務(wù)接口