|
2007 年 7 月 12 日
在 AIX? 上開(kāi)發(fā)一個(gè) Java? 應(yīng)用程序,并了解如何通過(guò)使用 PHP 接口擴(kuò)展該應(yīng)用程序以查看基礎(chǔ) Java 代碼。在 AIX 中可以開(kāi)發(fā)使用 Java 和 PHP 技術(shù)的應(yīng)用程序。在獲得使用 PHP 作為基于 Web 的接口平臺(tái)的好處的同時(shí),您可以使用 Java 代碼作為核心邏輯(或者重新部署現(xiàn)有的基于 Java 的應(yīng)用程序)。本文是系列文章的第 1 部分,研究了 AIX 中 Java 編程語(yǔ)言和 PHP 集成方法的基礎(chǔ),提供了使用這種結(jié)構(gòu)的示例應(yīng)用程序的簡(jiǎn)要概述,然后介紹了在安裝 Java 編程語(yǔ)言和 Apache Tomcat 以開(kāi)發(fā)應(yīng)用程序之前所需掌握的一些核心內(nèi)容。
引言
PHP 是一種非常優(yōu)秀的 Web 開(kāi)發(fā)語(yǔ)言,而在商業(yè)應(yīng)用程序開(kāi)發(fā)方面,Java? 編程語(yǔ)言十分流行。因此,為了在 AIX? Version 5.3 操作系統(tǒng)上充分利用它們的優(yōu)勢(shì),專(zhuān)門(mén)開(kāi)發(fā)了 PHP Java Bridge。本系列文章的目的是使得 AIX 5.3 開(kāi)發(fā)人員能夠更快地在 Web 應(yīng)用程序的開(kāi)發(fā)中集成 PHP 和 Java 技術(shù)。
為了說(shuō)明這一點(diǎn),您將按照典型的開(kāi)發(fā)過(guò)程來(lái)構(gòu)建一個(gè)簡(jiǎn)單的問(wèn)卷調(diào)查應(yīng)用程序,具體內(nèi)容包括:
- 開(kāi)發(fā)主要的 Java 應(yīng)用程序
- 通過(guò) Servlet 將 Java 應(yīng)用程序公開(kāi)為基于 Java 的 Web 應(yīng)用程序
- 添加在數(shù)據(jù)庫(kù)中存儲(chǔ)信息的支持
- 將原始應(yīng)用程序公開(kāi)為 Web 服務(wù),并為該應(yīng)用程序提供 PHP 接口
- 使用專(zhuān)門(mén)的 PHP Java Bridge 重新開(kāi)發(fā) PHP 接口
同時(shí)使用 PHP 和 Java 技術(shù)
對(duì)于企業(yè)而言,在為應(yīng)用程序開(kāi)發(fā)新的接口的過(guò)程中,最常見(jiàn)的問(wèn)題之一是如何設(shè)計(jì)解決方案。隨著向支持 Web 的應(yīng)用程序的發(fā)展,通常需要為使用現(xiàn)有的語(yǔ)言和框架的現(xiàn)有應(yīng)用程序開(kāi)發(fā)基于 Web 的包裝器。
對(duì)于某些環(huán)境,這可能會(huì)導(dǎo)致一些問(wèn)題,因?yàn)?Web 應(yīng)用程序的部署情況可能基于完全不同的技術(shù),并且在許多情況下,某個(gè)特定環(huán)境的能力和優(yōu)勢(shì)始終不能得到最大程度利用。
甚至在開(kāi)發(fā)新的應(yīng)用程序時(shí),也可能會(huì)出現(xiàn)同樣的問(wèn)題,即 Web 開(kāi)發(fā)專(zhuān)家習(xí)慣于某種環(huán)境,如 PHP,而您的業(yè)務(wù)應(yīng)用程序邏輯專(zhuān)家則對(duì) Java 技術(shù)有著豐富的經(jīng)驗(yàn)。有些時(shí)候,您可能希望充分利用不同環(huán)境所提供的靈活性。PHP 允許對(duì) Web 應(yīng)用程序進(jìn)行快速的應(yīng)用程序原型設(shè)計(jì),并且允許根據(jù)需要將 HTML 和嵌入的 PHP 命令混合在一起,這使得 Web 接口的開(kāi)發(fā)變得非常容易。
盡管 Java 環(huán)境可以使用 Java Server Pages (JSP) 和本地解決方案(如用于 HTML 對(duì)象部署的 Struts)進(jìn)行 Web 部署,但是它通常更適合用于大型應(yīng)用程序中的核心應(yīng)用程序邏輯。Java 環(huán)境具有強(qiáng)類(lèi)型和標(biāo)準(zhǔn)化的特點(diǎn),所以它更適合為復(fù)雜的業(yè)務(wù)應(yīng)用程序開(kāi)發(fā)解決方案。
關(guān)鍵是使用一種合適的解決方案,而該方案使您能夠?yàn)閼?yīng)用程序的不同部分(后端邏輯和前端接口)同時(shí)使用這兩種解決方案,并且使用 Java 和 PHP 技術(shù)的接口在兩種系統(tǒng)之間進(jìn)行信息交換。
Java 和 PHP 技術(shù)之間并沒(méi)有直接的關(guān)聯(lián),它們是兩種不同的技術(shù),使用了完全不同的邏輯、二進(jìn)制代碼和部署環(huán)境。然而,有一種方法可以使得兩種系統(tǒng)之間能夠相互通信,那就是使用面向服務(wù)的體系結(jié)構(gòu)(SOA)和 Web 服務(wù)來(lái)進(jìn)行信息交換。在這個(gè)示例場(chǎng)景中,您將通過(guò)一系列 Web 服務(wù)來(lái)公開(kāi) Java 應(yīng)用程序。然后,PHP 應(yīng)用程序?qū)⒊洚?dāng) Web 服務(wù)客戶端,以便與 Java Web 服務(wù)接口進(jìn)行通信。
另一種方法是使用 PHP Java Bridge,它提供了一個(gè)直接對(duì)象接口,該接口允許您在同一個(gè)應(yīng)用程序中直接使用 Java 和 PHP 代碼。
在本系列文章和教程中,將詳細(xì)介紹如何開(kāi)發(fā) Java 應(yīng)用程序,并使用基礎(chǔ) Java 代碼的 PHP 接口對(duì)該應(yīng)用程序進(jìn)行擴(kuò)展。
構(gòu)建問(wèn)卷調(diào)查應(yīng)用程序
在本系列文章的學(xué)習(xí)過(guò)程中,您將構(gòu)建一個(gè)簡(jiǎn)單的問(wèn)卷調(diào)查系統(tǒng),該系統(tǒng)提供了一系列問(wèn)題,并收集對(duì)這些問(wèn)題的回答,然后在這些回答的基礎(chǔ)上提供統(tǒng)計(jì)分析。
在 Java 代碼中使用一個(gè)用于調(diào)查的基類(lèi)構(gòu)建應(yīng)用程序邏輯,以進(jìn)行問(wèn)卷調(diào)查。您還將構(gòu)建一個(gè)單獨(dú)的基類(lèi)(保存問(wèn)題的核心數(shù)據(jù)),通過(guò)對(duì)這個(gè)類(lèi)進(jìn)行擴(kuò)展,您可以得到一些其他類(lèi)以支持不同的響應(yīng)類(lèi)型(多項(xiàng)選擇、文本條目、評(píng)估等等)。您可以在圖 1 中看到這個(gè)基本調(diào)查類(lèi)的結(jié)構(gòu)。
圖 1. 問(wèn)卷調(diào)查應(yīng)用程序的核心類(lèi)
要通過(guò) Web 接口公開(kāi)這個(gè)應(yīng)用程序,您需要構(gòu)建一個(gè) Java Servlet,它對(duì)原始問(wèn)題類(lèi)進(jìn)行了擴(kuò)展,支持以 HTML 的形式輸出這些問(wèn)題,并接收響應(yīng)。該元素的結(jié)構(gòu)如圖 2 所示。
圖 2. 將問(wèn)卷調(diào)查應(yīng)用程序公開(kāi)為基于 Java 的 Web 服務(wù)
因?yàn)槟赡芟M軌驅(qū)Y(jié)果信息進(jìn)行存儲(chǔ),所以需要構(gòu)建到 DB2? 數(shù)據(jù)庫(kù)的接口并對(duì)基本的 Survey 類(lèi)進(jìn)行擴(kuò)展,以便能夠?qū)⒔邮盏降捻憫?yīng)寫(xiě)入到數(shù)據(jù)庫(kù)中。
要提供針對(duì)該系統(tǒng)的 PHP 接口,可以在 Java 端對(duì)應(yīng)用程序進(jìn)行重新調(diào)整,使其作為一項(xiàng) Web 服務(wù),然后您可以從 PHP 應(yīng)用程序中對(duì)其進(jìn)行訪問(wèn),以提供可供選擇的接口。最后一項(xiàng)工作是,使用 PHP Java Bridge 重新部署該應(yīng)用程序以實(shí)現(xiàn)系統(tǒng)性能的最大化。
要完成前兩個(gè)步驟,即開(kāi)發(fā)核心應(yīng)用程序然后將該應(yīng)用程序部署為 Java Servlet,您需要安裝 Java 編程語(yǔ)言和 Apache Tomcat(一種 Java Servlet 部署環(huán)境)。讓我們首先來(lái)安裝和設(shè)置 Java 編程語(yǔ)言。
安裝 Java 編程語(yǔ)言
您需要安裝 Java Software Development Kit (SDK) Version 5 或更高版本,并且需要的是開(kāi)發(fā)環(huán)境而不是運(yùn)行時(shí)環(huán)境,因?yàn)槟鷮⑿枰?Java 源代碼編譯成示例應(yīng)用程序中的核心應(yīng)用程序?qū)ο笏璧念?lèi)。
AIX Version 5.3 分發(fā)版中提供了 32 位的 Java V1.4 SDK,而您的系統(tǒng)中可能已經(jīng)安裝了該軟件,因?yàn)樗?WebSM 所必需的。可以通過(guò)運(yùn)行 lslpp -L Java14.sdk 來(lái)進(jìn)行驗(yàn)證。IBM developerWorks 站點(diǎn)提供了 64 位的 Java 5 SDK(請(qǐng)參見(jiàn)參考資料)。除了使用更新的 Java 發(fā)行版之外,64 位應(yīng)用程序能夠在使用 64 位內(nèi)核的 64 位硬件上更高效地運(yùn)行??梢园凑障铝胁襟E進(jìn)行安裝:
- 下載 Java5_64.sdk.tar.gz 文件到您的系統(tǒng)。
- 使用
gunzip -c Java5_64.sdk.tar.gz | tar -xvf - 對(duì) SDK 進(jìn)行解壓縮。
- 以 root 用戶的身份,使用以下的命令行安裝 SDK:
installp -a -d Java5_64.sdk all。
或者通過(guò) SMIT:
- 運(yùn)行 smitt install。
- 選擇 Install and Update Software。
- 選擇 Install Software。
- 指定包含映像的文件的全路徑(例如,/usr/local/src/Java4_64.sdk)。
- 單擊 OK。
- 單擊 OK 然后安裝 SDK。
安裝 Tomcat
Apache Tomcat 提供了一個(gè) JSP 部署平臺(tái)。您可以通過(guò)它來(lái)部署使用 Web 接口或支持 Web 服務(wù)應(yīng)用程序部署的 Java 應(yīng)用程序。在本系列文章中,您將 Java 技術(shù)用作 Java 服務(wù)平臺(tái),稍后將其作為 Java 和 PHP 交叉平臺(tái)開(kāi)發(fā)的解決方案。
Tomcat 可能是最容易安裝和部署的系統(tǒng)組件。作為一個(gè)本地 Java 應(yīng)用程序,在安裝了 Java 應(yīng)用程序之后,安裝和設(shè)置 Tomcat 都是非常簡(jiǎn)單的。
按照以下步驟安裝 Tomcat:
- 下載最新的 Tomcat 包(請(qǐng)參見(jiàn)參考資料)。正如本文所述,V6.0.10 是 Apache Tomcat 最近的穩(wěn)定發(fā)行版。
- 使用
tar 和 gunzip 或 unzip 解壓縮 Tomcat 包: $ gunzip -c apache-tomcat-6.0.10.tar.gz|tar xvf -。
- 將解壓縮得到的目錄移動(dòng)到您希望安裝 Tomcat 的位置,但請(qǐng)不要對(duì)所創(chuàng)建的目錄進(jìn)行重命名。例如:
$ mv apache-tomcat-6.0.10 /usr/local。
- 在真實(shí)的目錄和您希望使用的名稱(chēng)之間創(chuàng)建一個(gè)符號(hào)鏈接。這使得可以在需要的時(shí)候,更方便地升級(jí)到更新的 Tomcat 版本:
$ ln -s /usr/local/apache-tomcat-6.0.10 /usr/local/tomcat。
因?yàn)?Tomcat 是一個(gè) Java 應(yīng)用程序,所以無(wú)需遵循特殊的安裝或者構(gòu)建方法。您現(xiàn)在應(yīng)該準(zhǔn)備好了安裝并啟動(dòng) Tomcat。
Tomcat 目錄結(jié)構(gòu)
在第一次啟動(dòng) 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 目錄包含主要的腳本以及控制和運(yùn)行 Tomcat 應(yīng)用程序的應(yīng)用程序。該目錄中包括一些 Shell 腳本、本地 Windows? 應(yīng)用程序和 Windows 批處理文件。您應(yīng)該對(duì)該目錄中的 Shell 腳本運(yùn)行
chmod 以確保您可以啟動(dòng)、停止以及控制 Tomcat 的安裝: $ chmod ugo+x bin/*.sh。
- conf 目錄包含一些保存了 Tomcat 配置信息的文件。在最初設(shè)置了 Tomcat 之后,幾乎不用再改變這些配置信息,因?yàn)榭梢酝ㄟ^(guò) Tomcat 接口直接完成大多數(shù)安裝和部署工作。
- lib 目錄中包含一些庫(kù)和 Java 代碼文件,而 Java 系統(tǒng)正是由這些內(nèi)容構(gòu)成的。
- 在安裝 Tomcat 服務(wù)器時(shí)將自動(dòng)創(chuàng)建 logs 目錄,其中包含日志文件(包括錯(cuò)誤日志)。
- temp 目錄也是在安裝 Tomcat 服務(wù)器時(shí)自動(dòng)創(chuàng)建的,其中包含各種臨時(shí)文件。
- webapps 目錄是安裝您的 Web 應(yīng)用程序組件的地方。您可以安裝 JAR 文件、WAR 文件和組成您的應(yīng)用程序的 JSP 文件。在缺省情況下,Tomcat 包括文檔、示例和用于控制 webapps 目錄中 Tomcat 安裝的管理應(yīng)用程序。
- work 目錄包含正在運(yùn)行的應(yīng)用程序的工作組件,該目錄是 Tomcat 在運(yùn)行時(shí)自動(dòng)創(chuàng)建的。
現(xiàn)在,讓我們來(lái)檢查一下 Tomcat 的配置,因?yàn)槟赡苄枰缕渲械牟糠峙渲?,以適應(yīng)您的環(huán)境。
Tomcat 配置
Tomcat 中大量的選項(xiàng)使人眼花繚亂,這些選項(xiàng)用于配置各種功能和選項(xiàng)。對(duì)于標(biāo)準(zhǔn)安裝而言,通常大多數(shù)選項(xiàng)不需要您去操心。
但是可能需要對(duì)很多關(guān)鍵的元素進(jìn)行配置。在缺省情況下,Web 服務(wù)器通常運(yùn)行于 TCP/IP 的 80 端口,為了避免與其產(chǎn)生沖突,Tomcat 在端口 8080 上運(yùn)行,但是在某些服務(wù)器上,可能已經(jīng)將其配置給另一個(gè)應(yīng)用程序使用,如 Web 代理。
通過(guò)編輯 conf/server.xml 文件,您可以改變 Tomcat 所偵聽(tīng)的缺省端口。您需要在 Catalina 服務(wù)里找到“Connector”塊,它通常位于該文件開(kāi)頭的 50 行中。您可以參見(jiàn)清單 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) 連接所使用的端口。如果您更改了這個(gè)值,那么請(qǐng)確保同時(shí)更改 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ù)能夠支持多個(gè)網(wǎng)絡(luò)接口或地址,那么您還必須修改主機(jī)名規(guī)范。需要在兩個(gè)位置對(duì)其進(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)的名稱(chēng)屬性。
在配置中,您需要檢查的另一個(gè)文件是 conf/web.xml 文件。您暫時(shí)不需要編輯這個(gè)文件,但需要熟悉其中的內(nèi)容,因?yàn)樵?Tomcat 服務(wù)器中設(shè)置附加的應(yīng)用程序時(shí)必須編輯這個(gè)文件。
啟動(dòng) Tomcat
在安裝和配置了 Tomcat 之后,您可以啟動(dòng) Tomcat 服務(wù)器。首先,確保將 JAVA_HOME 環(huán)境變量設(shè)置為 Java 環(huán)境的正確安裝位置。如果您已經(jīng)安裝了 Java5_64,那么該安裝位于 /usr/java5_64(請(qǐng)參見(jiàn)清單 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
|
另外,您還可以在一個(gè)環(huán)境變量中設(shè)置 Tomcat 安裝位置的路徑,以便更容易定位(請(qǐng)參見(jiàn)清單 6)。
清單 6. 設(shè)置 Tomcat 路徑
$ CATALINA_HOME=/usr/local/tomcat
$ export CATALINE_HOME
|
現(xiàn)在,您應(yīng)該能夠使用所提供的 Shell 腳本來(lái)啟動(dòng) Tomcat 了。啟動(dòng)腳本將顯示配置信息(請(qǐng)參見(jiàn)清單 7)。
清單 7. Tomcat 啟動(dòng)腳本
$ $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
|
如果其中報(bào)告了任何錯(cuò)誤,那么您可能希望在 logs/catalina.out 中查看更詳細(xì)的日志信息。清單 8 中顯示了一個(gè)輸出示例。
清單 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)出錯(cuò)情況的更詳細(xì)信息。最常見(jiàn)的問(wèn)題是與現(xiàn)有的服務(wù)發(fā)生端口沖突或者缺少 Java 安裝。
測(cè)試安裝
要對(duì) Tomcat 安裝進(jìn)行測(cè)試,一種比較簡(jiǎn)單的方法是在其啟動(dòng)之后訪問(wèn) Tomcat 服務(wù)器頁(yè)面。如果您沒(méi)有更改端口號(hào),并且您的服務(wù)器上安裝了瀏覽器,那么可以使用瀏覽器進(jìn)行訪問(wèn): http://localhost:8080/。
如果 Tomcat 服務(wù)器位于另一臺(tái)計(jì)算機(jī)或者您更改了端口號(hào),那么可以替換上述示例中的 localhost 和 8080。例如: http://192.168.0.170:8080/。
您應(yīng)該得到與圖 3 所示類(lèi)似的窗口。
圖 3. 正在運(yùn)行的 Tomcat 安裝
總結(jié)
在本文中,您簡(jiǎn)要地了解了一些與在 AIX 中使用 PHP 和 Java 技術(shù)進(jìn)行開(kāi)發(fā)和部署的原因相關(guān)的問(wèn)題,以及對(duì)這兩種系統(tǒng)進(jìn)行集成的一些可用的解決方案。然后介紹了一個(gè)基本的應(yīng)用程序,其中使用了 Java 后端和類(lèi),以便支持使用 PHP 通過(guò) Web 接口進(jìn)行擴(kuò)展的不同操作。在本系列文章的下一部分中,您將使用 Java 技術(shù)開(kāi)發(fā)核心應(yīng)用程序邏輯。
|