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