您好,欢迎访问一九零五行业门户网

浅谈PHP与Java之Web开发整合技术

前言 php為語法簡單的腳本語言,可以做為html的嵌入型語言,而且與apache網頁伺服器搭配的設定容易、效能亦高。 前言 php为语法简单的脚本语言,可以做为html的嵌入型语言,而且与apache网页伺服器搭配的设定容易、效能亦高。 java則是商業用途的優秀物件導
前言 php為語法簡單的腳本語言,可以做為html的嵌入型語言,而且與apache網頁伺服器搭配的設定容易、效能亦高。 前言 php为语法简单的脚本语言,可以做为html的嵌入型语言,而且与apache网页伺服器搭配的设定容易、效能亦高。 java則是商業用途的優秀物件導向語言,具有非常多有用的程式庫,也有許多web應用程式開發框架(framework)。 java则是商业用途的优秀物件导向语言,具有非常多有用的程式库,也有许多web应用程式开发框架(framework)。 比較php與java,php的商業用途程式庫較為缺乏,而java的語法、開發環境設定較為複雜。比较php与java,php的商业用途程式库较为缺乏,而java的语法、开发环境设定较为复杂。 因此,web開發人員不應對php或java抱持成見,而應審時度勢,結合php與java各自的優勢,才能更有效率地開發web應用程式。因此,web开发人员不应对php或java抱持成见,而应审时度势,结合php与java各自的优势,才能更有效率地开发web应用程式。 本文將介紹三種不同的php與java整合開發技術,希望可以提供建置php與java之web開發整合環境的參考。本文将介绍三种不同的php与java整合开发技术,希望可以提供建置php与java之web开发整合环境的参考。
三種php與java之web開發整合技術
目前已知的php與java之web開發整合技術可分成soap(simple object access protocol)、quercus、php/java bridge三種,這些技術可以讓php與java在開發web應用程式時互相使用彼此的程式庫。 三种php与java之web开发整合技术
目前已知的php与java之web开发整合技术可分成soap(simple object access protocol)、quercus、php/java bridge三种,这些技术可以让php与java在开发web应用程式时互相使用彼此的程式库。 本文因篇幅關係,將側重於介紹如何在php程式中使用java程式庫以及如何配置soap、querus與php/java bridge等套件。本文因篇幅关系,将侧重于介绍如何在php程式中使用java程式库以及如何配置soap、querus与php/java bridge等套件。
本文使用的java程式庫範例如list-1所示:本文使用的java程式库范例如list-1所示:
list-1 helloservice.java list-1 helloservice.java
下面將介紹如何讓php結合soap、querus與php/java bridge技術,呼叫echohello(jason),並得到java say hello to jason的執行結果。下面将介绍如何让php结合soap、querus与php/java bridge技术,呼叫echohello(jason),并得到java say hello to jason的执行结果。
一、soap(simple object access protocol) 一、soap(simple object access protocol)
soap是ibm及microsoft等公司開發、w3c推薦,用來實作分散式物件技術的協定。 soap是ibm及microsoft等公司开发、w3c推荐,用来实作分散式物件技术的协定。 soap提供一套以xml來包裝程式呼叫、參數傳遞與訊息回傳的機制,藉由xml純文字的特性,可透過http、https、smtp等通信管道穿越企業的防火牆,比起corba、java rmi及dcom這些以專屬binary格式傳送資料的分散式物件技術協定,soap具有與程式語言、平台和硬體無關的特性。 soap提供一套以xml来包装程式呼叫、参数传递与讯息回传的机制,藉由xml纯文字的特性,可透过http、https、smtp等通信管道穿越企业的防火墙,比起corba、java rmi及dcom这些以专属binary格式传送资料的分散式物件技术协定,soap具有与程式语言、平台和硬体无关的特性。
java語言最常使用的soap套件是apache axis2,php的是php-soap延伸模組。 java语言最常使用的soap套件是apache axis2,php的是php-soap延伸模组。 下面說明如何透過這兩個soap套件整合php與java。下面说明如何透过这两个soap套件整合php与java。
(一) 前置作業:安裝php >=5.0版、jdk >=1.4版以及tomcat。 (一) 前置作业:安装php >=5.0版、jdk >=1.4版以及tomcat。
(二) 使用apache axis2將list-1 helloservice.java程式庫部署成soap的web services (二) 使用apache axis2将list-1 helloservice.java程式库部署成soap的web services
1. 安裝apache axis2 1. 安装apache axis2
首先到apache axis2網站首頁下載最新的war(web archive)distribution-axis2.war。首先到apache axis2网站首页下载最新的war(web archive)distribution-axis2.war。 將tomcat的伺服器配置中的unpackwars設為true,然後將axis2.war複製到tomcat的webapps目錄下。将tomcat的伺服器配置中的unpackwars设为true,然后将axis2.war复制到tomcat的webapps目录下。 重新啟動tomcat,如果訪問http://localhost:/axis2可以看到axis2歡迎頁,即完成apache axis2的安裝。重新启动tomcat,如果访问http://localhost:/axis2可以看到axis2欢迎页,即完成apache axis2的安装。 其中是tomcat的網路服務埠口,一般為8080。其中是tomcat的网路服务埠口,一般为8080。
2. 部署helloservice服務 2. 部署helloservice服务
(1) 撰寫services.xml來描述服務部署訊息 (1) 撰写services.xml来描述服务部署讯息
helloservice.java的服務部署訊息如list-2所示。 helloservice.java的服务部署讯息如list-2所示。 服務的name屬性定義服務的名稱。服务的name属性定义服务的名称。 apache axis2使用服務的名稱創建服務的端點位址,如http://localhost:/axis2/services/。 apache axis2使用服务的名称创建服务的端点位址,如http://localhost:/axis2/services/。 因此,helloservice服務的端點位址為http://localhost:/axis2/services/helloservice 。因此,helloservice服务的端点位址为http://localhost:/axis2/services/helloservice 。 serviceclass參數指定服務對應的類別。 serviceclass参数指定服务对应的类别。 每個元素定義服務中一個操作的配置。每个元素定义服务中一个操作的配置。 的name屬性應設置為服務對應類別中方法的名稱。 的name属性应设置为服务对应类别中方法的名称。 messagereceiver元素定義用於處理此操作的消息接收器。 messagereceiver元素定义用于处理此操作的消息接收器。
list-2 services.xml list-2 services.xml
(2) 將服務包裝成axis archive (2) 将服务包装成axis archive
apache axis2服務必須先包裝成axis archive (.aar)才能部署。 apache axis2服务必须先包装成axis archive (.aar)才能部署。 axis archive (.aar)的格式與jar文件相同(使用jar或zip創建),內部包含服務對應的類別與services.xml。 axis archive (.aar)的格式与jar文件相同(使用jar或zip创建),内部包含服务对应的类别与services.xml。 helloservice服務的aar文件內部結構如list-3所示: helloservice服务的aar文件内部结构如list-3所示:
list-3 helloservice.aar的內部結構 list-3 helloservice.aar的内部结构
(3) 完成服務部署 (3) 完成服务部署
在apache axis2中部署服務相當簡單,只需將.aar複製到tomcat目錄下的/webapps/axis2/web-inf/services/即可完成部署。在apache axis2中部署服务相当简单,只需将.aar复制到tomcat目录下的/webapps/axis2/web-inf/services/即可完成部署。
(三) 使用php-soap延伸模組讓php調用helloservice服務 (三) 使用php-soap延伸模组让php调用helloservice服务
1. 載入、設定php-soap延伸模組 1. 载入、设定php-soap延伸模组
(1) 載入php-soap延伸模組 (1) 载入php-soap延伸模组
在php.ini找到延伸模組設置部分,增加一行代碼來自動載入php-soap延伸模組。在php.ini找到延伸模组设置部分,增加一行代码来自动载入php-soap延伸模组。 在windows上,這一行代碼是:「extension = php_soap.dll」;在unix上是:「extension = php_soap.so」。在windows上,这一行代码是:「extension = php_soap.dll」;在unix上是:「extension = php_soap.so」。 定義、設定extension_dir,讓它指向包含php-soap延伸模組的目錄。定义、设定extension_dir,让它指向包含php-soap延伸模组的目录。 如果需要重新編譯原始程式碼,請在configure命令中添加--enable-soap選項,再重新編譯。如果需要重新编译原始程式码,请在configure命令中添加--enable-soap选项,再重新编译。
(2) 設定php-soap延伸模組 (2) 设定php-soap延伸模组
在php.ini增加下列代碼,以完成php-soap延伸模組的設定:在php.ini增加下列代码,以完成php-soap延伸模组的设定:
[soap] [soap]
soap.wsdl_cache_enabled=0 soap.wsdl_cache_enabled=0
soap.wsdl_cache_dir=/tmp soap.wsdl_cache_dir=/tmp
soap.wsdl_cache_ttl=86400 soap.wsdl_cache_ttl=86400
2. 撰寫php的soap client 2. 撰写php的soap client
程式如list-4所示,sayhello1.php首先會讀取helloservice服務的wsdl文件(由apache axis2根據services.xml產生)來創建soap client,再設定參數param0為jason,然後呼叫helloservice服務的echohello函式,最後得到並列印出回傳的結果:java say hello to jason,詳細的運作過程如【圖1】所示。程式如list-4所示,sayhello1.php首先会读取helloservice服务的wsdl文件(由apache axis2根据services.xml产生)来创建soap client,再设定参数param0为jason,然后呼叫helloservice服务的echohello函式,最后得到并列印出回传的结果:java say hello to jason,详细的运作过程如【图1】所示。
list-4 sayhello1.php list-4 sayhello1.php
圖1 利用soap整合php與java之運作示意圖图1 利用soap整合php与java之运作示意图
二、quercus 二、quercus
quercus是caucho technology公司為resin application server開發之100%以java實作的php 5引擎(required jdk 1.5)。 quercus是caucho technology公司为resin application server开发之100%以java实作的php 5引擎(required jdk 1.5)。 quercus可以讓php程式在jvm上執行,下面介紹如何使用quercus搭配resin來整合php與java。 quercus可以让php程式在jvm上执行,下面介绍如何使用quercus搭配resin来整合php与java。
(一) 前置作業:安裝jdk >=1.5版。 (一) 前置作业:安装jdk >=1.5版。
(二) 安裝resin application server及quercus (二) 安装resin application server及quercus
首先到caucho technology公司的首頁( http://www.caucho.com/ )下載resin application server的zip文件(內含quercus),然後將其解壓縮到某個目錄$resin_home,例如:windows環境下的c:/resin。首先到caucho technology公司的首页( http://www.caucho.com/ )下载resin application server的zip文件(内含quercus),然后将其解压缩到某个目录$resin_home,例如:windows环境下的c:/resin。 啟動$resin_home下的httpd.exe,使用瀏覽器連接http://localhost:8080/,如果可以看到成功執行的畫面,代表resin application server及quercus已成功安裝。启动$resin_home下的httpd.exe,使用浏览器连接http://localhost:8080/,如果可以看到成功执行的画面,代表resin application server及quercus已成功安装。
(三) 將list-1 helloservice.java放在$resin_home/webapps/root/web-inf/classes/hello/目錄下。 (三) 将list-1 helloservice.java放在$resin_home/webapps/root/web-inf/classes/hello/目录下。 helloservice.java在被調用時,會自動被編譯成class文件。 helloservice.java在被调用时,会自动被编译成class文件。
(四) 撰寫php調用helloservice.java的程式,如list-5所示。 (四) 撰写php调用helloservice.java的程式,如list-5所示。 將sayhello2.php放在$resin_home/webapps/root/ 目錄下。将sayhello2.php放在$resin_home/webapps/root/ 目录下。
list-5 sayhello2.php list-5 sayhello2.php
(五) 使用瀏覽器連接http://localhost:8080/sayhello2.php,resin application server就會把$resin_home/webapps/root/sayhello2.php送給quercus轉換成相對應的java程式,然後編譯、執行,最後resin application server回傳java say hello to jason,顯示在瀏覽器畫面。 (五) 使用浏览器连接http://localhost:8080/sayhello2.php,resin application server就会把$resin_home/webapps/root/sayhello2.php送给quercus转换成相对应的java程式,然后编译、执行,最后resin application server回传java say hello to jason,显示在浏览器画面。
使用quercus搭配resin整合php與java只需要安裝jdk、resin application server(內含quercus),若要連接資料庫才需再安裝其他資料庫伺服器,如:mysql server,環境的設置比起soap與php/java bridge整合方式來得簡單。使用quercus搭配resin整合php与java只需要安装jdk、resin application server(内含quercus),若要连接资料库才需再安装其他资料库伺服器,如:mysql server,环境的设置比起soap与php /java bridge整合方式来得简单。 但quercus與php/zend engine會有相容性的問題。但quercus与php/zend engine会有相容性的问题。
三、php/java bridge 三、php/java bridge
java和script語言的介面定義於jsr 223,jsr是java specification requests的簡寫。 java和script语言的介面定义于jsr 223,jsr是java specification requests的简写。 jsr 223規定了從script語言建立java類別實體、呼叫方法以及取得結果物件的介面,也規定了從java呼叫script語言的方法、轉換參數以及傳回值的方法。 jsr 223规定了从script语言建立java类别实体、呼叫方法以及取得结果物件的介面,也规定了从java呼叫script语言的方法、转换参数以及传回值的方法。 下面介紹如何使用php/java bridge套件讓php使用java程式庫,php/java bridge是jsr 223之php 5的java介面實作。下面介绍如何使用php/java bridge套件让php使用java程式库,php/java bridge是jsr 223之php 5的java介面实作。
(一) 前置作業:安裝php >=5.0版、jdk >=1.4.2版、apache http server >=2.0版、tomcat(使用port 8080)。 (一) 前置作业:安装php >=5.0版、jdk >=1.4.2版、apache http server >=2.0版、tomcat(使用port 8080)。
(二) 安裝php/java bridge套件 (二) 安装php/java bridge套件
首先到php/java bridge網站的首頁( http://php-java-bridge.sourceforge.net/doc/ ),點選「download」可以連到sourceforge.net,選擇下載php-java-bridge_j2ee.zip文件,解壓縮後,可以取得javabridge.war文件。首先到php/java bridge网站的首页( http://php-java-bridge.sourceforge.net/doc/ ),点选「download」可以连到sourceforge.net,选择下载php-java-bridge_j2ee.zip文件,解压缩后,可以取得javabridge.war文件。 將tomcat的伺服器配置中的unpackwars設為true,然後將javabridge.war複製到tomcat的webapps目錄下。将tomcat的伺服器配置中的unpackwars设为true,然后将javabridge.war复制到tomcat的webapps目录下。 重新啟動tomcat,即可在webapps目錄下看到javabridge這個目錄。重新启动tomcat,即可在webapps目录下看到javabridge这个目录。 將javabridge目錄下的java子目錄完整複製到$php_include目錄,並將$php_include目錄加到php.ini的include_path。将javabridge目录下的java子目录完整复制到$php_include目录,并将$php_include目录加到php.ini的include_path。 例如:若$php_include是c:/php5/pear,則include_path=.;c:/php5/pear。例如:若$php_include是c:/php5/pear,则include_path=.;c:/php5/pear。 java子目錄內包含使用php實作的php/java bridge原始程式碼。 java子目录内包含使用php实作的php/java bridge原始程式码。 (三) 將list-1的程式放在tomcat目錄下的webapps/javabridge/web-inf/classes/hello/ 中,並編譯之。 (三) 将list-1的程式放在tomcat目录下的webapps/javabridge/web-inf/classes/hello/ 中,并编译之。
(四) 撰寫php調用helloservice.java的程式,如list-6所示。 (四) 撰写php调用helloservice.java的程式,如list-6所示。 將sayhello3.php放在apache server的documentroot目錄下。将sayhello3.php放在apache server的documentroot目录下。
list-6 sayhello3.php list-6 sayhello3.php
(五) 使用瀏覽器連接http://localhost/sayhello3.php,則apache server會將sayhello3.php交給php/zend engine編譯、執行。 (五) 使用浏览器连接http://localhost/sayhello3.php,则apache server会将sayhello3.php交给php/zend engine编译、执行。 當php呼叫java程式庫時,php/java bridge (java子目錄下的php程式)會將此呼叫轉換成*.phpjavabridge文件格式,然後傳送到tomcat下javabridge的php.java.servlet.phpjavaservlet處理,最後透過php/java bridge回傳結果給php。当php呼叫java程式库时,php/java bridge (java子目录下的php程式)会将此呼叫转换成*.phpjavabridge文件格式,然后传送到tomcat下javabridge的php.java.servlet.phpjavaservlet处理,最后透过php/java bridge回传结果给php。 list-6程式執行後可看到java say hello to jason顯示在瀏覽器畫面。 list-6程式执行后可看到java say hello to jason显示在浏览器画面。
結語 结语
隨著web的發展,使用單一語言來開發web應用程式未必是最有效率的方式。随着web的发展,使用单一语言来开发web应用程式未必是最有效率的方式。 期許透過本文的介紹,可以讓web開發人員瞭解如何使用php與java兩種語言整合開發web程式的技巧,更希望可以促使web開發人員思考、發掘更好的web應用程式開發方式,以因應電子化時代快速變動及大量產生的資訊需求。期许透过本文的介绍,可以让web开发人员了解如何使用php与java两种语言整合开发web程式的技巧,更希望可以促使web开发人员思考、发掘更好的web应用程式开发方式,以因应电子化时代快速变动及大量产生的资讯需求。
其它类似信息

推荐信息