淺談PHP與Java之Web開發整合技術 
 
 
鄭哲聖郑哲圣
 

前言 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開發整合技術 <BR>  <BR> 目前已知的PHP與Java之Web開發整合技術可分成SOAP(Simple Object Access Protocol)、Quercus、PHP/Java Bridge三種,這些技術可以讓PHP與Java在開發Web應用程式時互相使用彼此的程式庫。 三种PHP与Java之Web开发整合技术 <BR> <BR>目前已知的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:<port>/axis2可以看到Axis2歡迎頁,即完成Apache Axis2的安裝。重新启动Tomcat,如果访问http://localhost:<port>/axis2可以看到Axis2欢迎页,即完成Apache Axis2的安装。 其中<port>是Tomcat的網路服務埠口,一般為8080。其中<port>是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:<port>/axis2/services/<nameofservice >。 Apache Axis2使用服务的名称创建服务的端点位址,如http://localhost:<port>/axis2/services/<nameofservice >。 因此,HelloService服務的端點位址為http://localhost:<port>/axis2/services/HelloService 。因此,HelloService服务的端点位址为http://localhost:<port>/axis2/services/HelloService 。 ServiceClass參數指定服務對應的類別。 ServiceClass参数指定服务对应的类别。 每個<operation>元素定義服務中一個操作的配置。每个<operation>元素定义服务中一个操作的配置。 <operation>的name屬性應設置為服務對應類別中方法的名稱。 <operation>的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套件

  1. 首先到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这个目录。
  2. 將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应用程式开发方式,以因应电子化时代快速变动及大量产生的资讯需求。

浅谈PHP与Java之Web开发整合技术相关推荐

  1. 浅谈常用的几种web攻击方式以及解决办法

    身在互联网的时候,web在给我们带来便利的同时,有些人也在盯着这些便利,因此出现了攻击网站的现象.所以我们在开发的时候,要注意这些容易被攻击的地方,以及做好防御的措施,下面将介绍一些这些 常见的攻击手 ...

  2. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    2019独角兽企业重金招聘Python工程师标准>>> 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制 ...

  3. JavaWeb那些事儿(一)--为什么做java的web开发使用struts2,springMVC和spring这样的框架

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  4. 浅谈工厂设计--java必备技能

    浅谈工厂设计–java必备技能 说到工厂,我就联想到了亚洲的大工厂富士康–接过订单然后按照固定的模板生产商品,其实java中工厂类中的工厂方法也是一样,接过参数,根据参数来生产需要的商品: 今天我们一 ...

  5. 浅谈智能摄像机背后的p2p连线技术

    浅谈智能摄像机背后的p2p连线技术 物联网主要由各类传感器(音视频/图像/温湿度/烟雾/压力/速度)+无线入网模块(WIFI/BLE/Zigbee/NB-IOT)组成, 经过约十年的发展,国内物联网已 ...

  6. 浅谈 Python 程序和 C 程序的整合

    浅谈 Python 程序和 C 程序的整合 Python 是一种用于快速开发软件的编程语言,它的语法比较简单,易于掌握,但存在执行速度慢的问题,并且在处理某些问题时存在不足,如对计算机硬件系统的访问, ...

  7. php三种web开发技术,三种WEB开发主流技术ASP-PHP-JSP的评价

    三种Web开发主流技术ASP-PHP-JSP的评价 [摘要]本文从程序开发者的角度,对现今社会盛行的WEB开发技术进行了分析,旨在让WEB 开发人员.使用者.准备学习的人对WEB开发技术有更加深入的了 ...

  8. 视频基础知识:浅谈视频会议中H.264编码标准的技术发展

    浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...

  9. 张利国java pdf_Java Web开发与实战–Eclipse+Tomcat+Servlet+JSP整合应用 (刘伟张利国) PDF...

    资源名称:Java Web开发与实战–Eclipse+Tomcat+Servlet+JSP整合应用 (刘伟,张利国) PDF 第1章 web开发工具的安装与使用 第2章 web编程技术基础 第3章 s ...

最新文章

  1. 手写 30 个主流机器学习算法,代码超 3 万行,全都开源了!
  2. python十六进制看图片
  3. 嵌入式 linux 程序不能运行,嵌入式Linux中在开发板上/usr/bin目录下不能运行自己交叉编译的程序...
  4. 知道c语言单元测试答案西安工程大学免费,C语言程序设计(西安工程大学)知到章节测试题答案...
  5. 课堂练习——最大联通之数组
  6. mysql between and 包含边界吗_10分钟让你明白MySQL是如何利用索引的
  7. 用重构指导Clean Code(二):依恋情结和switch语句
  8. 交换机选用要点及订货主要技术条件
  9. idea中刷新maven依赖,总是拉不下来
  10. 爱思助手更新后无法连接服务器,爱思助手无法连接手机怎么办 爱思助手连接失败问题解决办法...
  11. 转:马明哲:拥有执行力才能让你强大
  12. ES文件浏览器 WIFI 查看电脑文件怎么弄
  13. 安装lux:推荐一款网页视频下载工具。并简单使用。(win)
  14. 关于1-n中缺失的1个数字算法的优化
  15. 进店率、提袋率、客单价
  16. QGIS制图中面积小的区域不显示注记
  17. php和durex,PHP语言25周年 杜蕾斯发文庆祝 文案绝了
  18. Linux的.a、.so和.o文件
  19. 炫舞时代显示服务器出错,qq炫舞2各种常见bug大全 FAQ详解
  20. 4A(统一安全管控平台)解析

热门文章

  1. 从开发角度读懂公司卫生间一直有人窜稀的原理
  2. 汉字转拼音 python_python实现将汉字转换成汉语拼音的库
  3. 人脸识别行业分析报告
  4. 《如何阅读一本书》—[美]莫提默.J.艾德勒、查尔斯.范多伦
  5. flowable-ui(v6.7.2)简单的请假流程审批操作(一)
  6. 在计算机网络中 工作在物理层上的设备,简述工作在物理层,数据链路层和网络层上的设备分别有哪些...
  7. 双11技术总指挥汤兴:今年双11是技术和商业的完美共振
  8. 【历史上的今天】5 月 6 日:第一台实际运行程序的计算机;Adobe 转型云端;首个非拉丁文网址出现
  9. 基于Linux、QT、C++的“别踩白块儿”小游戏
  10. 靶机测试-bulldog