PHP與Java整合開發詳解(一)

來源:互聯網
上載者:User

標籤:system   分享圖片   操作   列表   不要猶豫   ack   就是   1.4   進階   

很久以前,有人從www上看到看到天空上一個很亮的亮點,它就是Java語言,與此同時,在另一個地方一位夢想家也看到了一個亮點,它就是PHP。

時間一天天過去,這兩個亮點也變得越來越亮,很快,它們受到了編程者的喜歡,於是有人有疑問了:要是它們兩者相遇,會發生什麼事情?有沒有可能將它們的強項結合在一起呢?

嘗試在PHP和Java之間搭建一座橋樑,利用這座橋樑在這兩個實體之間建立起一個溝通渠道,在這座橋樑的協助下,你可以在Java中開發類,然後在PHP中調用它們的方法,同樣,在你的Java案頭或Web應用程式中也可以使用PHP指令碼。

在這篇文章中,你將會學到如何:

◆安裝和配置PHP/Java橋

◆在PHP指令碼中使用Java類

◆在Java類中使用PHP指令碼

◆在JSP頁面中使用PHP指令碼

那我們開始吧!

安裝和配置PHP/Java橋

最新的PHP/Java橋zip包可在http://sourceforge.net/projects/php-java-bridge/下載到,安裝過程依賴於選擇哪個Java平台通過這座橋與PHP指令碼互動。

◆對於J2SE,安裝非常簡單:

◆安裝J2SE 1.6或更高版本

◆安裝PHP 5.1.4或更高版本

◆解壓php-java-bridge_5.2.2_j2ee.zip包

從命令提示字元進入剛剛解壓後的目錄,輸入:

?>java ?classpath JavaBridge.war TestInstallation

在這個檔案夾下,你應該看到一個ext目錄,它下麵包括四個.jar檔案,拷貝其中的JavaBridge.jar 和php-script.jar到你的J2SE安裝目錄下的ext檔案夾(通常是{JAVA_HOME}/jre/lib/ext)。

對於J2EE,要執行下列安裝步驟:

將JavaBridge.war檔案拷貝到你的J2EE伺服器或servlet引擎(Tomcat,Resin等)下的auto_deploy檔案夾。

根據你的應用程式重新命名該檔案,然後重啟J2EE伺服器,等待自動部署進程建立與該.war檔案相關的目錄,在這個例子中,這個應用程式叫做appName.war。

從瀏覽器測試新的應用程式,輸入:http://localhost:8080/appName,然後點擊test.php。

如果你的J2EE伺服器運行在不同的主機和連接埠好,參數要做相應的修改。

注意:如果你想在Apache或IIS上運行J2EE/PHP應用程式,將包括appName的目錄拷貝到Apache/IIS的主目錄下。

在PHP指令碼中使用Java類

首先,你必須要知道PHP/Java橋為在PHP指令碼中整合Java類建立了哪些特殊的函數(PHP類),這些函數包括:

◆java:它允許你訪問給定名稱的Java類型,如:

◆java("java.lang.System")->getProperties();

◆java_autoload:它允許你在當前的PHP指令碼中載入一套Java庫,如:

◆java_autoload("my_1.jar;my_2.jar");

◆java_cast:它允許你將一個Java對象轉換成一個PHP值,如:

$mystr=new java("java.lang.String","9");$phpnr=java_cast($mystr,"integer");echo $ phpnr;

◆java_is_null:你可以使用它檢查值是否為空白,如:

◆java_is_null(java("java.lang.System")->;getProperty("my_prop"))

◆java_session:你可以使用它返回一個交談控制代碼,如:

$session = java_session();

◆java_values:你可以使用它評估對象和提取其內容(僅當這個操作是可能的時候),如:

$result = java_values($calcinstance->addAB($term_1,$term_2));

為了使用這些函數,你的PHP應用程式必須包含對應的PHP類,最重要的類是Java.inc,在目錄appName/java下有完整的類列表,通過Java.inc,你可以獲得Java類的執行個體,如:

$calcinstance=new Java("calculator.CalculatorBean");

提醒:在PHP/Java橋的安裝目錄/documentation/API下有更多的函數和它們的詳細資料。在PHP指令碼中使用Java類

在Java類中使用PHP指令碼

為了在Java應用程式中調用PHP方法,你必須對Java API非常熟悉,這個API最重要的類是:

javax.script.ScriptEngineManager:這個類擴充了java.lang.Object類,並且為ScriptEngine類提供了執行個體化機制。

javax.script.ScriptEngine:這是一個Java介面,包括了每個Java ScriptEngine中期望的完整功能的函數,它是通過如AbstractScriptEngine, InteractivePhpScriptEngine, InvocablePhpScriptEngine, InvocablePhpServletScriptEngine, PhpScriptEngine,和 PhpServletScriptEngine這些類實現的。
?
javax.script.Invocable:這個介面提供了一個函數允許java應用程式在指令碼編譯器下調用中介層代碼。

提醒:在/documentation/server/documentation/API目錄下有更多的類及其詳細資料。

 

 


 

 

一個在PHP指令碼中的Java類樣本

現在你已經知道了PHP/Java橋的基礎知識了,可以著手開發自己的第一個PHP/Java應用程式了,這裡舉的例子比較簡單,它是一個PHP指令碼,實現了+,-,*,/四個基本操作的計算機,Java將會是這個應用程式的核心引擎,因為計算結果是由一個叫做CalculatorBean的Java類提供的,換句話說就是PHP將會把運算對象傳遞給Java函數,然後接收計算結果,並將結果顯示給使用者。

CalculatorBean類為運算子定義了四個函數,為返回結果定義了一個函數,完整的代碼如下

package calculator;public class CalculatorBean implements 
java.io.Serializable { private float result; public CalculatorBean(){ this.result = 0.0f; }public float addAB(float a, float b)   { this.result = a+b; return result; } public float subAB(float a, float b)   {this.result = a-b; return result; } public float mplAB(float a, float b)   { this.result = a*b; return result;} public float divAB(float  a, float b)   { this.result = a/b; 
return result;public float getResult(){   return this.result;   }}

當你編譯這個Java原始碼時,結果會產生一個叫做calculator.jar的.jar檔案,將這個檔案拷貝到appName/WEB-INF/lib目錄。

接下來就可以編寫PHP指令碼來調用前面的Java類了,使用前面描述的函數,你可以編寫一個calculator.php檔案,參考

 

將calculator.php放如appName目錄,如果你在Tomcat伺服器下測試

(localhost:8080),在瀏覽器的地址欄輸入:

http://localhost:8080/appName/calculator.php,斷行符號,你應該會看到1所示的頁面:

JSP頁面中的PHP指令碼樣本

假如你想使用PHP的隨機函數在0和最大值之間獲得一個隨機數,你可以象下面這樣使用ScriptEngine.

<%  javax.script.ScriptEngine e =   php.java.script.EngineFactory.getInvocablePhpScriptEngine (this, application, request, response);  e.getContext().setWriter(out);  e.eval ("<?php function randomNumber($maxim) 
{ return rand(0,java_values($maxim)); }; ?>");  javax.script.Invocable i = (javax.script.Invocable) e;  Object result = null;  result = i.invokeFunction("randomNumber", 
new Object[]{new Integer(100)});  e.eval ((java.io.Reader)null); 
// flush the output generated by invokeXXX  out.println("Random number printed from the servlet: " + result);%>

在瀏覽器地址欄中輸入:http://localhost:8080/appName/random.jsp,斷行符號,你可能會看到的那樣一個結果:

Java傳統型應用程式中的PHP指令碼

這個任務使用javax.script.ScriptEngineManager 和 javax.script.ScriptEngine類很容易就實現了,http://javaboutique.internet.com/tutorials/thebridge/listing3.html顯示了一個和前面功能一樣的J2SE/PHP應用程式,你可以在命令提示字元下測試這個應用程式:

?gt;java –classpath {place here the application classpath} Javaphp

使用jrunscript工具運行PHP指令碼

Java內建了一個叫做jrunscript的工具,使用它可以從Java中向PHP指令碼賦值,如:

jrunscript -l php {phpFile}.php

如下面的Hello.php指令碼:

<?php  echo ‘Hello‘;?>

可以像下面這樣運行jrunscript:

..> jrunscript -l php Hello.php

更好地工作

本文僅對PHP/Java橋做了一個簡單的介紹,希望對你有所協助,PHP/Java橋在PHP和Java這兩門進階程式設計語言之間搭起了一座互連的橋樑,如果你認為這個技術對你的項目有協助,那就不要猶豫了,動手開幹吧!

引用地址:http://www.chinaz.com/program/2008/1113/44836.shtml

PHP與Java整合開發詳解(一)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.