余楊奎
摘要:
在“互聯(lián)網(wǎng)+”時(shí)代,Web開發(fā)技術(shù)日新月異,平臺(tái)開發(fā)不再依靠同一種Web開發(fā)技術(shù),跨平臺(tái)調(diào)用數(shù)據(jù)也屢見不鮮。為提高PHP的跨平臺(tái)性和擴(kuò)展性,通過PHP和Java橋接技術(shù),真正實(shí)現(xiàn)Web三層架構(gòu)。針對(duì)PHP和Java在技術(shù)引用上存在互補(bǔ)的特點(diǎn),利用phpJavabridge橋接方式,使用PHP程序調(diào)用jar里的Java類以判斷Java版本、服務(wù)器操作系統(tǒng)以及操作系統(tǒng)版本,同時(shí)使用PHP程序調(diào)用自定義jar類的Reducefloat方法,完成減法運(yùn)算。將兩種技術(shù)有效結(jié)合起來,使通過PHP開發(fā)新接口程序需要調(diào)用Java方法時(shí),可以減少對(duì)原有服務(wù)端程序的修改,為PHP開發(fā)技術(shù)的跨平臺(tái)性和擴(kuò)展性提供了技術(shù)論證。
關(guān)鍵詞:
PHP;環(huán)境變量;自定義類;橋接
DOIDOI:10.11907/rjdk.172532
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2018)003012103
英文摘要Abstract:“Internet +” times, change rapidly of Web development technology,platform development no longer rely on the same kind of Web development technology, It is often seen that called cross platform data. In order to improve the scalability and PHP cross platform, through PHP and Java bridging PHP technology, realize the three layer structure of Web for PHP and Java, there is a complementary characteristic in the technology reference, using phpJavabridge bridge, using the PHP program called jars Java class to determine the Java version, the server operating system and operating system version. The Reducefloat method also use a custom jar class called PHP program, complete the subtraction operation. The two techniques are effectively combined, through the development of new PHP interface program to call the Java method, can be reduced to the original server program changes, provide technical demonstration of cross platform and scalability of PHP development technology.
英文關(guān)鍵詞Key Words:PHP;environment variables; custom classes; bridges
0引言
PHP是一種專業(yè)的開放性網(wǎng)站開發(fā)語言,其語言風(fēng)格和C語言類似[1]。PHP在Web開發(fā)中占據(jù)著重要地位,通常PHP開發(fā)環(huán)境會(huì)提供一個(gè)Web的應(yīng)用程序框架,如Thinkphp、FDF框架等。在框架開發(fā)的基礎(chǔ)上,采用MVC模式,對(duì)Web進(jìn)行了模型、控制器及視圖的分離,提高了程序開發(fā)效率。因此,PHP深受Web開發(fā)者的喜愛。
PHP作為一種動(dòng)態(tài)腳本語言,簡(jiǎn)單易學(xué),初學(xué)者容易上手,在Web開發(fā)方面具有獨(dú)特優(yōu)勢(shì),如開放源代碼、跨平臺(tái)性強(qiáng)、開發(fā)效率高,但它在企業(yè)級(jí)應(yīng)用中運(yùn)用并不廣泛,大型企業(yè)應(yīng)用的市場(chǎng)占有率不高。Java是一種成熟的開發(fā)平臺(tái),在項(xiàng)目開發(fā)技術(shù)上,企業(yè)級(jí)應(yīng)用首選Java技術(shù),但基于Java的Web開發(fā)技術(shù),比如JSP、HTTP Servlet[2]等,結(jié)構(gòu)相對(duì)復(fù)雜,要求程序員技術(shù)全面,不利于初學(xué)者快速進(jìn)行Web應(yīng)用開發(fā)。
在Web應(yīng)用開發(fā)中,經(jīng)常會(huì)遇到不同Web開發(fā)技術(shù)需要進(jìn)行數(shù)據(jù)對(duì)接。企業(yè)在市場(chǎng)定位時(shí),基于安全性考慮選擇了Java技術(shù),并在Java技術(shù)開發(fā)以及數(shù)據(jù)設(shè)計(jì)上投入了大量資金,但由于各種原因?qū)е翵ava開發(fā)人才流失時(shí),PHP程序相對(duì)簡(jiǎn)單、容易上手,可采用PHP程序調(diào)用Java方法。Java在結(jié)構(gòu)設(shè)計(jì)上更加安全,因此銀行系統(tǒng)都是采用Java技術(shù)開發(fā)。當(dāng)?shù)谌焦拘枰尤脬y行系統(tǒng)時(shí),涉及的報(bào)文需要進(jìn)行加密、解密以及數(shù)字簽名等數(shù)據(jù)交互。
“信融天下互聯(lián)網(wǎng)金融P2P網(wǎng)貸系統(tǒng)”基于PHP框架開發(fā),按照銀監(jiān)會(huì)監(jiān)管要求,從會(huì)員資金安全方面考慮,互聯(lián)網(wǎng)金融P2P網(wǎng)貸系統(tǒng)需要進(jìn)行銀行存管,這就意味著信融天下互聯(lián)網(wǎng)金融P2P網(wǎng)貸系統(tǒng)需要對(duì)接銀行存管系統(tǒng)。對(duì)接銀行存管發(fā)送的Java數(shù)據(jù)報(bào),摒棄原有的PHP系統(tǒng),重新使用Java技術(shù)開發(fā),在功能和配置上,必定會(huì)浪費(fèi)更多人力、物力和財(cái)力資源。筆者在開發(fā)過程中發(fā)現(xiàn),可以通過橋接技術(shù),生成銀行系統(tǒng)需要的報(bào)文發(fā)送給銀行方處理,并且可以處理銀行端返回的報(bào)文,生成自身需要的報(bào)文格式。
PHP和Java在技術(shù)引用上存在很大互補(bǔ)性,將兩種開發(fā)技術(shù)結(jié)合起來,各取所長(zhǎng),可以避免很多人力財(cái)力浪費(fèi)。同時(shí),廣播電視大學(xué)正在向開放大學(xué)轉(zhuǎn)型,開放大學(xué)作為一種新型大學(xué),同時(shí)也是一個(gè)體系和一個(gè)平臺(tái),即社會(huì)各方資源的協(xié)同學(xué)習(xí)型平臺(tái)。利用php-Java-bridge橋接方式,完成PHP程序調(diào)用jar里的Java類或自定義方法,在開放大學(xué)轉(zhuǎn)型中實(shí)現(xiàn)平臺(tái)建設(shè)也有著重要意義。
1研究現(xiàn)狀及目的、方法
1.1研究現(xiàn)狀
國內(nèi)也有很多學(xué)者對(duì)PHP和Java虛擬機(jī)對(duì)接進(jìn)行了研究,李文兵、朱可[3]提出WebSphere sMash框架,可以讓基于PHP開發(fā)的Web應(yīng)用程序運(yùn)行在JVM上,提高PHP與Java的互聯(lián)互通能力;鄧紅梅[4]在PHP和Java虛擬機(jī)之間通過嵌入式連接,在不影響Java原本運(yùn)行效率的基礎(chǔ)上,提高PHP的運(yùn)行效率,實(shí)現(xiàn)數(shù)據(jù)資源共享;肖文鵬[5]在Linux環(huán)境下安裝和配置PHP的Java擴(kuò)展模塊,利用PHP的Java擴(kuò)展模塊在PHP腳本中創(chuàng)建并調(diào)用Java對(duì)象;勞建成、蔣遷謙[6]在PHP和Java之間,選擇使用應(yīng)用層HTTP協(xié)議和PHP實(shí)現(xiàn)客戶端和服務(wù)端的數(shù)據(jù)交互消息;李嵐[7]提出了Linux下使用PHP程序調(diào)用JDK類可行的解決方案。
1.2研究目的
在前人研究的基礎(chǔ)上,筆者通過技術(shù)創(chuàng)新,利用phpJavabridge實(shí)現(xiàn)PHP中調(diào)用Java平臺(tái)封裝在jar包里的class類和方法,將PHP和Java進(jìn)行無縫對(duì)接,給廣大PHP程序員全新的體驗(yàn)。該方法結(jié)合PHP開發(fā)語言的特點(diǎn),大大提高了Web開發(fā)者的工作效率。
1.3實(shí)驗(yàn)方法
本文首先通過文獻(xiàn)研究法,了解PHP與Java互聯(lián)互通技術(shù)的應(yīng)用,然后再根據(jù)《信融天下互聯(lián)網(wǎng)金融P2P網(wǎng)貸系統(tǒng)》開發(fā)案例進(jìn)行實(shí)證研究,實(shí)現(xiàn)PHP程序調(diào)用Java類。
2phpJavabridge安裝與配置
考慮學(xué)習(xí)的便利性,選擇使用Windows 7操作系統(tǒng)、IIS 7.0配置Web服務(wù)器。
2.1IIS安裝配置
安裝好IIS后,對(duì)應(yīng)用程序池進(jìn)行設(shè)置。
2.2PHP安裝
為方便配置PHP,選擇使用護(hù)衛(wèi)神·PHP套件,在網(wǎng)站配置目錄下使用phpinfo()指令,運(yùn)行查看PHP配置結(jié)果。
2.3Java環(huán)境安裝與環(huán)境變量配置
選用jdk8u121windowsx64配置Java環(huán)境,安裝完成后配置環(huán)境變量步驟如下:
(1)新建系統(tǒng)變量。在“新建系統(tǒng)變量”對(duì)話框中,“變量名”輸入“JAVA_HOME”,在“變量值”輸入JDK的安裝路徑。
(2)設(shè)置PATH變量。單擊“編輯”按鈕,在“變量值”文本框添加“%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;”或者“%JAVA_HOME%\bin;”。
(3)設(shè)置CLASSPATH 變量。選擇“編輯”,在“變量值”開始的地方添加內(nèi)容:“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;”。
(4)測(cè)試環(huán)境變量配置。通過CMD命令輸入“JAVAC”,查看輸出結(jié)果,判斷是否配置成功[8]。
2.4phpjavabridge配置
(1)下載JavaBridge.jar,在搭建Web應(yīng)用程序服務(wù)器時(shí),作為PHP與Java橋接的應(yīng)用程序包,放置在Java安裝目錄jre1.8.0_121\lib\ext目錄下。
(2)解壓JavaBridge.jar,放置在配置好的Web服務(wù)器根目錄下。其中JavaBridge\METAINF\java目錄下有一個(gè)名為Java.inc的文件,在該文件里,提供了PHP程序語言調(diào)用Java類的方法。
(3)雙擊JavaBridge.jar啟動(dòng)橋接接口,這里8080是常用端口,也可以設(shè)置為其它端口。
3PHP調(diào)用JDK中的Java類
header("Contenttype:text/html;charset=utf8");//設(shè)置編碼格式,避免出現(xiàn)亂碼
require_once("/JavaBridge/java/Java.inc");
MYMsystem = new Java( 'java.lang.System' );
echo "Java版本是:".MYMsystem>getProperty('java.version')."
";
echo "操作系統(tǒng)是:".MYMsystem>getProperty('os.name')."
";
echo "操作系統(tǒng)版本是:".MYMsystem>getProperty('os.version');
瀏覽器運(yùn)行返回結(jié)果如下:Java版本是1.8.0_121,操作系統(tǒng)是Windows Server 2008 R2,操作系統(tǒng)版本是6.1。
4自定義Java方法調(diào)用
4.1自定義Java類
自定義Java類并打包成testjava.jar存放到JDK安裝目錄的ext目錄下。需注意的是,每次增加或修改jar,都需要重新啟動(dòng)JavaBridge。
public class testjava {
public String name = "";
public void setname (String name){
this.name = name;
}
public String getname (){
return this.name;
}
public float Reducefloat(float num1, float num2){
return num1 num2;
}
}
4.2使用php文件調(diào)用自定義Java類
require_once("/JavaBridge/java/Java.inc");//引用PHP語言調(diào)用
MYMtestjava = new java("testjava"); //產(chǎn)生實(shí)例“testjava”是Java的jar包名
MYMtestjava >setname ("php調(diào)用Java的自定義方法!");//后面使用PHP程序語句對(duì)Java類中的方法進(jìn)行調(diào)用
echo "使用PHP方法調(diào)用自定義的testjava類里的getname方法,返回:".MYMtestjava>getname ()."
";
echo "使用PHP方法調(diào)用自定義的testjava類里的Reducefloat方法,返回:".MYMtestjava> Reducefloat (15,9);
瀏覽器運(yùn)行返回結(jié)果如下:
使用PHP方法調(diào)用自定義的testjava類里的getname方法,返回:php調(diào)用Java的自定義方法。
使用PHP方法調(diào)用自定義的testjava類里的Reducefloat方法,返回:6。
5結(jié)果分析
通過以上實(shí)驗(yàn)結(jié)果得出結(jié)論,使用PHP開發(fā)語言可以對(duì)JDK中的Java類以及自定義的Java類進(jìn)行調(diào)用,即利用橋接方式,用PHP語言調(diào)用jar包中的Java類和自定義方法。Sun公司的白皮書[9]比較了PHP、Java Servlet等技術(shù)的功能,結(jié)論是PHP可以滿足短期目標(biāo),具有可移植性,而Java Servlet具有平臺(tái)無關(guān)性等優(yōu)點(diǎn),本實(shí)驗(yàn)可以作為文獻(xiàn)[9]的一個(gè)補(bǔ)充,從技術(shù)角度對(duì)PHP和Java兩種開發(fā)語言進(jìn)行橋接。
6結(jié)語
使用phpjavabridge實(shí)現(xiàn)PHP調(diào)用Java類的技術(shù),有利于PHP程序的擴(kuò)展。從安全性角度看,可以真正實(shí)現(xiàn)Web應(yīng)用的三層架構(gòu)。特別是企業(yè)在Java上投入大量資金的情況下,需要使用PHP進(jìn)行擴(kuò)展,只要利用好phpjavabridge技術(shù),可以大大節(jié)約開發(fā)成本。同時(shí),在開放大學(xué)轉(zhuǎn)型之際,對(duì)構(gòu)建社會(huì)各方資源的協(xié)同學(xué)習(xí)型平臺(tái)具有一定參考價(jià)值。
參考文獻(xiàn)參考文獻(xiàn):
[1]梁廣浩.搭建框架快速開發(fā)微信公眾平臺(tái)功能[J].大眾科技,2015(10):134137,155.
[2]JASON HUNTER,WILLIAM CRAWFORD.Java Servlet programming[M].USA:OReilly,2001:4377.
[3]李文兵,朱可.帶給PHP和Java世界的雙贏[J].程序員,2009(9):106107.
[4]鄧紅梅.基于Java技術(shù)的PHP編譯器的設(shè)計(jì)與開發(fā)方式芻議[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(4):33,36.
[5]肖文鵬.珠聯(lián)璧合PHP與JAVA的結(jié)合[J].中文信息,2002(10):7475,78.
[6]勞建成,蔣遷謙.基于PHP和Java的消息中間件的實(shí)現(xiàn)原理研究[J].無線互聯(lián)科技,2017(2):102103.
[7]李嵐.基于BASE64編碼的電子支付系統(tǒng)安全性分析[J].微計(jì)算機(jī)信息,2006(73):178179,221.
[8]JDK安裝與環(huán)境變量配置.[EB/OL].http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html.
[9]Sun Microsystems.Comparing methods for server side dynamic content white paper[M].USA:Sun Microsystems Press,2000:5157.
責(zé)任編輯(責(zé)任編輯:黃?。?