2007 年 7 月 12 日
在 AIX? 上開發(fā)一個 Java? 應(yīng)用程序,并了解如何通過使用 PHP 接口擴(kuò)展該應(yīng)用程序以查看基礎(chǔ) Java 代碼。在 AIX 中可以開發(fā)使用 Java 和 PHP 技術(shù)的應(yīng)用程序。在獲得使用 PHP 作為基于 Web 的接口平臺的好處的同時,您可以使用 Java 代碼作為核心邏輯(或者重新部署現(xiàn)有的基于 Java 的應(yīng)用程序)。本文是系列文章的第 1 部分,研究了 AIX 中 Java 編程語言和 PHP 集成方法的基礎(chǔ),提供了使用這種結(jié)構(gòu)的示例應(yīng)用程序的簡要概述,然后介紹了在安裝 Java 編程語言和 Apache Tomcat 以開發(fā)應(yīng)用程序之前所需掌握的一些核心內(nèi)容。
引言
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 服務(wù),并為該應(yīng)用程序提供 PHP 接口
- 使用專門的 PHP Java Bridge 重新開發(fā) PHP 接口
同時使用 PHP 和 Java 技術(shù)
對于企業(yè)而言,在為應(yīng)用程序開發(fā)新的接口的過程中,最常見的問題之一是如何設(shè)計解決方案。隨著向支持 Web 的應(yīng)用程序的發(fā)展,通常需要為使用現(xiàn)有的語言和框架的現(xiàn)有應(yīng)用程序開發(fā)基于 Web 的包裝器。
對于某些環(huán)境,這可能會導(dǎo)致一些問題,因為 Web 應(yīng)用程序的部署情況可能基于完全不同的技術(shù),并且在許多情況下,某個特定環(huán)境的能力和優(yōu)勢始終不能得到最大程度利用。
甚至在開發(fā)新的應(yīng)用程序時,也可能會出現(xiàn)同樣的問題,即 Web 開發(fā)專家習(xí)慣于某種環(huán)境,如 PHP,而您的業(yè)務(wù)應(yīng)用程序邏輯專家則對 Java 技術(shù)有著豐富的經(jīng)驗。有些時候,您可能希望充分利用不同環(huán)境所提供的靈活性。PHP 允許對 Web 應(yīng)用程序進(jìn)行快速的應(yīng)用程序原型設(shè)計,并且允許根據(jù)需要將 HTML 和嵌入的 PHP 命令混合在一起,這使得 Web 接口的開發(fā)變得非常容易。
盡管 Java 環(huán)境可以使用 Java Server Pages (JSP) 和本地解決方案(如用于 HTML 對象部署的 Struts)進(jìn)行 Web 部署,但是它通常更適合用于大型應(yīng)用程序中的核心應(yīng)用程序邏輯。Java 環(huán)境具有強(qiáng)類型和標(biāo)準(zhǔn)化的特點,所以它更適合為復(fù)雜的業(yè)務(wù)應(yīng)用程序開發(fā)解決方案。
關(guān)鍵是使用一種合適的解決方案,而該方案使您能夠為應(yīng)用程序的不同部分(后端邏輯和前端接口)同時使用這兩種解決方案,并且使用 Java 和 PHP 技術(shù)的接口在兩種系統(tǒng)之間進(jìn)行信息交換。
Java 和 PHP 技術(shù)之間并沒有直接的關(guān)聯(lián),它們是兩種不同的技術(shù),使用了完全不同的邏輯、二進(jìn)制代碼和部署環(huán)境。然而,有一種方法可以使得兩種系統(tǒng)之間能夠相互通信,那就是使用面向服務(wù)的體系結(jié)構(gòu)(SOA)和 Web 服務(wù)來進(jìn)行信息交換。在這個示例場景中,您將通過一系列 Web 服務(wù)來公開 Java 應(yīng)用程序。然后,PHP 應(yīng)用程序?qū)⒊洚?dāng) Web 服務(wù)客戶端,以便與 Java Web 服務(wù)接口進(jìn)行通信。
另一種方法是使用 PHP Java Bridge,它提供了一個直接對象接口,該接口允許您在同一個應(yīng)用程序中直接使用 Java 和 PHP 代碼。
在本系列文章和教程中,將詳細(xì)介紹如何開發(fā) Java 應(yīng)用程序,并使用基礎(chǔ) Java 代碼的 PHP 接口對該應(yīng)用程序進(jìn)行擴(kuò)展。
構(gòu)建問卷調(diào)查應(yīng)用程序
在本系列文章的學(xué)習(xí)過程中,您將構(gòu)建一個簡單的問卷調(diào)查系統(tǒng),該系統(tǒng)提供了一系列問題,并收集對這些問題的回答,然后在這些回答的基礎(chǔ)上提供統(tǒng)計分析。
在 Java 代碼中使用一個用于調(diào)查的基類構(gòu)建應(yīng)用程序邏輯,以進(jìn)行問卷調(diào)查。您還將構(gòu)建一個單獨的基類(保存問題的核心數(shù)據(jù)),通過對這個類進(jìn)行擴(kuò)展,您可以得到一些其他類以支持不同的響應(yīng)類型(多項選擇、文本條目、評估等等)。您可以在圖 1 中看到這個基本調(diào)查類的結(jié)構(gòu)。
圖 1. 問卷調(diào)查應(yīng)用程序的核心類
要通過 Web 接口公開這個應(yīng)用程序,您需要構(gòu)建一個 Java Servlet,它對原始問題類進(jìn)行了擴(kuò)展,支持以 HTML 的形式輸出這些問題,并接收響應(yīng)。該元素的結(jié)構(gòu)如圖 2 所示。
圖 2. 將問卷調(diào)查應(yīng)用程序公開為基于 Java 的 Web 服務(wù)
因為您可能希望能夠?qū)Y(jié)果信息進(jìn)行存儲,所以需要構(gòu)建到 DB2? 數(shù)據(jù)庫的接口并對基本的 Survey 類進(jìn)行擴(kuò)展,以便能夠?qū)⒔邮盏降捻憫?yīng)寫入到數(shù)據(jù)庫中。
要提供針對該系統(tǒng)的 PHP 接口,可以在 Java 端對應(yīng)用程序進(jìn)行重新調(diào)整,使其作為一項 Web 服務(wù),然后您可以從 PHP 應(yīng)用程序中對其進(jìn)行訪問,以提供可供選擇的接口。最后一項工作是,使用 PHP Java Bridge 重新部署該應(yīng)用程序以實現(xiàn)系統(tǒng)性能的最大化。
要完成前兩個步驟,即開發(fā)核心應(yīng)用程序然后將該應(yīng)用程序部署為 Java Servlet,您需要安裝 Java 編程語言和 Apache Tomcat(一種 Java Servlet 部署環(huán)境)。讓我們首先來安裝和設(shè)置 Java 編程語言。
安裝 Java 編程語言
您需要安裝 Java Software Development Kit (SDK) Version 5 或更高版本,并且需要的是開發(fā)環(huán)境而不是運行時環(huán)境,因為您將需要把 Java 源代碼編譯成示例應(yīng)用程序中的核心應(yīng)用程序?qū)ο笏璧念悺?/p>
AIX Version 5.3 分發(fā)版中提供了 32 位的 Java V1.4 SDK,而您的系統(tǒng)中可能已經(jīng)安裝了該軟件,因為它是 WebSM 所必需的??梢酝ㄟ^運行 lslpp -L Java14.sdk 來進(jìn)行驗證。IBM developerWorks 站點提供了 64 位的 Java 5 SDK(請參見參考資料)。除了使用更新的 Java 發(fā)行版之外,64 位應(yīng)用程序能夠在使用 64 位內(nèi)核的 64 位硬件上更高效地運行??梢园凑障铝胁襟E進(jìn)行安裝:
- 下載 Java5_64.sdk.tar.gz 文件到您的系統(tǒng)。
- 使用
gunzip -c Java5_64.sdk.tar.gz | tar -xvf - 對 SDK 進(jìn)行解壓縮。
- 以 root 用戶的身份,使用以下的命令行安裝 SDK:
installp -a -d Java5_64.sdk all 。
或者通過 SMIT:
- 運行 smitt install。
- 選擇 Install and Update Software。
- 選擇 Install Software。
- 指定包含映像的文件的全路徑(例如,/usr/local/src/Java4_64.sdk)。
- 單擊 OK。
- 單擊 OK 然后安裝 SDK。
安裝 Tomcat
Apache Tomcat 提供了一個 JSP 部署平臺。您可以通過它來部署使用 Web 接口或支持 Web 服務(wù)應(yīng)用程序部署的 Java 應(yīng)用程序。在本系列文章中,您將 Java 技術(shù)用作 Java 服務(wù)平臺,稍后將其作為 Java 和 PHP 交叉平臺開發(fā)的解決方案。
Tomcat 可能是最容易安裝和部署的系統(tǒng)組件。作為一個本地 Java 應(yīng)用程序,在安裝了 Java 應(yīng)用程序之后,安裝和設(shè)置 Tomcat 都是非常簡單的。
按照以下步驟安裝 Tomcat:
- 下載最新的 Tomcat 包(請參見參考資料)。正如本文所述,V6.0.10 是 Apache Tomcat 最近的穩(wěn)定發(fā)行版。
- 使用
tar 和 gunzip 或 unzip 解壓縮 Tomcat 包: $ gunzip -c apache-tomcat-6.0.10.tar.gz|tar xvf - 。
- 將解壓縮得到的目錄移動到您希望安裝 Tomcat 的位置,但請不要對所創(chuàng)建的目錄進(jìn)行重命名。例如:
$ mv apache-tomcat-6.0.10 /usr/local 。
- 在真實的目錄和您希望使用的名稱之間創(chuàng)建一個符號鏈接。這使得可以在需要的時候,更方便地升級到更新的 Tomcat 版本:
$ ln -s /usr/local/apache-tomcat-6.0.10 /usr/local/tomcat 。
因為 Tomcat 是一個 Java 應(yīng)用程序,所以無需遵循特殊的安裝或者構(gòu)建方法。您現(xiàn)在應(yīng)該準(zhǔn)備好了安裝并啟動 Tomcat。
Tomcat 目錄結(jié)構(gòu)
在第一次啟動 Tomcat 之前,您應(yīng)該再次檢查 Tomcat 系統(tǒng)的配置,以確保它與您的環(huán)境是匹配的。在檢查配置之前,有必要查看一下 Tomcat 安裝的基本目錄結(jié)構(gòu):
- LICENSE
- NOTICE
- RELEASE-NOTES
- RUNNING.txt
- bin/
- conf/
- lib/
- logs/
- temp/
- webapps/
- work/
Tomcat 安裝中的關(guān)鍵部分如下所述:
- bin 目錄包含主要的腳本以及控制和運行 Tomcat 應(yīng)用程序的應(yīng)用程序。該目錄中包括一些 Shell 腳本、本地 Windows? 應(yīng)用程序和 Windows 批處理文件。您應(yīng)該對該目錄中的 Shell 腳本運行
chmod 以確保您可以啟動、停止以及控制 Tomcat 的安裝: $ chmod ugo+x bin/*.sh 。
- conf 目錄包含一些保存了 Tomcat 配置信息的文件。在最初設(shè)置了 Tomcat 之后,幾乎不用再改變這些配置信息,因為可以通過 Tomcat 接口直接完成大多數(shù)安裝和部署工作。
- lib 目錄中包含一些庫和 Java 代碼文件,而 Java 系統(tǒng)正是由這些內(nèi)容構(gòu)成的。
- 在安裝 Tomcat 服務(wù)器時將自動創(chuàng)建 logs 目錄,其中包含日志文件(包括錯誤日志)。
- temp 目錄也是在安裝 Tomcat 服務(wù)器時自動創(chuàng)建的,其中包含各種臨時文件。
- webapps 目錄是安裝您的 Web 應(yīng)用程序組件的地方。您可以安裝 JAR 文件、WAR 文件和組成您的應(yīng)用程序的 JSP 文件。在缺省情況下,Tomcat 包括文檔、示例和用于控制 webapps 目錄中 Tomcat 安裝的管理應(yīng)用程序。
- work 目錄包含正在運行的應(yīng)用程序的工作組件,該目錄是 Tomcat 在運行時自動創(chuàng)建的。
現(xiàn)在,讓我們來檢查一下 Tomcat 的配置,因為您可能需要更新其中的部分配置,以適應(yīng)您的環(huán)境。
Tomcat 配置
Tomcat 中大量的選項使人眼花繚亂,這些選項用于配置各種功能和選項。對于標(biāo)準(zhǔn)安裝而言,通常大多數(shù)選項不需要您去操心。
但是可能需要對很多關(guān)鍵的元素進(jìn)行配置。在缺省情況下,Web 服務(wù)器通常運行于 TCP/IP 的 80 端口,為了避免與其產(chǎn)生沖突,Tomcat 在端口 8080 上運行,但是在某些服務(wù)器上,可能已經(jīng)將其配置給另一個應(yīng)用程序使用,如 Web 代理。
通過編輯 conf/server.xml 文件,您可以改變 Tomcat 所偵聽的缺省端口。您需要在 Catalina 服務(wù)里找到“Connector”塊,它通常位于該文件開頭的 50 行中。您可以參見清單 1 中的示例。
清單 1. Connector 塊
<Service name="Catalina">
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" />
|
將端口屬性值更改為您希望使用的端口。如果需要,您可能還希望調(diào)整 redirectPort 屬性,其中包含了安全套接字層 (SSL) 連接所使用的端口。如果您更改了這個值,那么請確保同時更改 SSL 連接的端口規(guī)范,如清單 2 所示。
清單 2. 更改端口規(guī)范
<!-- Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the JSSE configuration, when using APR, the
connector should be using the OpenSSL style configuration
described in the APR documentation -->
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
|
如果您希望服務(wù)器特定主機(jī)上的服務(wù)能夠支持多個網(wǎng)絡(luò)接口或地址,那么您還必須修改主機(jī)名規(guī)范。需要在兩個位置對其進(jìn)行設(shè)置,一處是在 Engine 標(biāo)記中,而另一處是在特定的 Host 標(biāo)記中,如清單 3 所示。
清單 3. 修改主機(jī)名規(guī)范
<Engine name="Catalina" defaultHost="localhost">
...
<!-- Define the default virtual host
Note: XML Schema validation will not work with Xerces 2.2.
-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
|
您必須更改 defaultHost ,然后更改相應(yīng)的名稱屬性。
在配置中,您需要檢查的另一個文件是 conf/web.xml 文件。您暫時不需要編輯這個文件,但需要熟悉其中的內(nèi)容,因為在 Tomcat 服務(wù)器中設(shè)置附加的應(yīng)用程序時必須編輯這個文件。
啟動 Tomcat
在安裝和配置了 Tomcat 之后,您可以啟動 Tomcat 服務(wù)器。首先,確保將 JAVA_HOME 環(huán)境變量設(shè)置為 Java 環(huán)境的正確安裝位置。如果您已經(jīng)安裝了 Java5_64,那么該安裝位于 /usr/java5_64(請參見清單 4)。
清單 4. Java 安裝位置
$ JAVA_HOME=/usr/java5_64
$ export JAVA_HOME
|
您可能還希望在主要的 PATH 中顯式地添加 Java 執(zhí)行路徑,如清單 5 所示。
清單 5. 將 Java 應(yīng)用程序添加到 PATH
$ PATH=$JAVA_HOME/bin:$JAVA_HOME/rje/bin:$PATH
$ export PATH
|
另外,您還可以在一個環(huán)境變量中設(shè)置 Tomcat 安裝位置的路徑,以便更容易定位(請參見清單 6)。
清單 6. 設(shè)置 Tomcat 路徑
$ CATALINA_HOME=/usr/local/tomcat
$ export CATALINE_HOME
|
現(xiàn)在,您應(yīng)該能夠使用所提供的 Shell 腳本來啟動 Tomcat 了。啟動腳本將顯示配置信息(請參見清單 7)。
清單 7. Tomcat 啟動腳本
$ $CATALINA_HOME/bin/startup.sh
Using CATALINA_BASE: /Data/Incoming/apache-tomcat-6.0.10
Using CATALINA_HOME: /Data/Incoming/apache-tomcat-6.0.10
Using CATALINA_TMPDIR: /Data/Incoming/apache-tomcat-6.0.10/temp
Using JRE_HOME: /usr/java5_64
|
如果其中報告了任何錯誤,那么您可能希望在 logs/catalina.out 中查看更詳細(xì)的日志信息。清單 8 中顯示了一個輸出示例。
清單 8. Catalina.out 日志
Mar 31, 2007 8:51:11 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The Apache Tomcat Native library which allows optimal performance in production
environments was not found on the java.library.path: /usr/local/lib:/u
sr/local/apr/lib:.:/usr/java5/extensions:/usr/java5/lib
Mar 31, 2007 8:51:13 AM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Mar 31, 2007 8:51:13 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 5262 ms
Mar 31, 2007 8:51:13 AM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Mar 31, 2007 8:51:13 AM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.10
Mar 31, 2007 8:51:23 AM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Mar 31, 2007 8:51:23 AM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Mar 31, 2007 8:51:23 AM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/34 config=null
Mar 31, 2007 8:51:23 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 10466 ms
|
其中應(yīng)該包含有關(guān)出錯情況的更詳細(xì)信息。最常見的問題是與現(xiàn)有的服務(wù)發(fā)生端口沖突或者缺少 Java 安裝。
測試安裝
要對 Tomcat 安裝進(jìn)行測試,一種比較簡單的方法是在其啟動之后訪問 Tomcat 服務(wù)器頁面。如果您沒有更改端口號,并且您的服務(wù)器上安裝了瀏覽器,那么可以使用瀏覽器進(jìn)行訪問: http://localhost:8080/ 。
如果 Tomcat 服務(wù)器位于另一臺計算機(jī)或者您更改了端口號,那么可以替換上述示例中的 localhost 和 8080。例如: http://192.168.0.170:8080/ 。
您應(yīng)該得到與圖 3 所示類似的窗口。
圖 3. 正在運行的 Tomcat 安裝
總結(jié)
在本文中,您簡要地了解了一些與在 AIX 中使用 PHP 和 Java 技術(shù)進(jìn)行開發(fā)和部署的原因相關(guān)的問題,以及對這兩種系統(tǒng)進(jìn)行集成的一些可用的解決方案。然后介紹了一個基本的應(yīng)用程序,其中使用了 Java 后端和類,以便支持使用 PHP 通過 Web 接口進(jìn)行擴(kuò)展的不同操作。在本系列文章的下一部分中,您將使用 Java 技術(shù)開發(fā)核心應(yīng)用程序邏輯。
|