加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP通过php-java-bridge调用JAVA的jar包里class类

发布时间:2020-12-13 21:32:48 所属栏目:PHP教程 来源:网络整理
导读:正 文: ? 有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法,一般飘易推荐的做法是采用php-java-bridge做桥接,本文就来介绍一下大致的实现方法。 ? 先简单说下php-java-bridge做桥接的实现原理 : 先打开java的一个监听端口,php调用ja

正 文:

?

有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法,一般飘易推荐的做法是采用php-java-bridge做桥接,本文就来介绍一下大致的实现方法。

?

先简单说下php-java-bridge做桥接的实现原理

先打开java的一个监听端口,php调用java的时候,将对应的方法调用转发到java的指定端口,由java执行后再将结果返回给php。这种模式是一种比较典型的代理模式,php在这里成为了一个代理转发器,把java的类调用转发给后端的java执行。

?

我们再来看看具体的流程

1、下载二进制的 JavaBridge.jar包、java/Java.inc库文件,下载地址:http://php-java-bridge.sourceforge.net/pjb/download.php

注意,当前最新版本是PHP/Java Bridge 6.2.1,但是这个版本也是2010-10-31更新的,现在都2016年了,都过去6年了,从这个更新日期来看,源码编译安装的方式只适合在此日期之前发布的PHP版本,比如PHP 5.3.3发布日期是2010-7-22,但是保守估计,源码编译安装的方式仅适合PHP 5.2以及更低的PHP版本,不适合PHP 5.3/PHP 5.4/PHP 5.5/PHP 5.6/PHP 7这些高版本的PHP了,源码编译最高只支持到PHP5.2。飘易这里不采用源码安装的方式,直接使用二进制包打开监听端口就可以了。

?

2、linux下安装java环境,具体安装方法就不说了,搜索下;飘易使用的是java-1.7,留意下环境配置:

文件?/etc/profile?末尾添加:

export?JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64
export?JRE_HOME=$JAVA_HOME/jre
export?CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export?PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

然后,source /etc/profile?使之立即生效。

PS: 如何找到java安装路径呢?

3、将JAVA的jar包文件放置在java的库位置?$JAVA_HOME/jre/lib/ext/,如

/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/lib/ext/app-security.jar

?

4、在JavaBridge.jar所在目录运行命令(先cd到所在目录)?

java?-jar?JavaBridge.jar?SERVLET_LOCAL:8081?&

(加&是让其在后台运行)

或者直接带上日志等级

java?-jar?JavaBridge.jar?SERVLET:8081?3?JavaBridge.log?&

执行后,我们使用命令netstat -nltp,发现linux已经开启了一个8081端口开始监听:

?

PS:如果需要开机启用,配置:

/etc/rc.local 添加开机启动

java?-jar?JavaBridge.jar所在绝对路径?SERVLET_LOCAL:8081?&

?

5、在web目录下放置?Java.inc文件,编写php测试代码 test.php

<?php?header(?‘Content-Type:?text/html;?charset=UTF-8‘?);

define("JAVA_DEBUG",?true);?//调试设置
define("JAVA_HOSTS",?"127.0.0.1:8081");?//设置javabridge监听端口
/*0:?Log?nothing,?not?even?fatal?errors.
??1:?Log?fatal?system?errors?such?as?"out?of?memory?error".
??2:?Log?java?exceptions.*/
define("JAVA_LOG_LEVEL",?2);?//java.log_level:?0-6

require_once?"Java.inc";?//php调用java的接口,与该脚本位于同一目录
java_set_file_encoding("UTF-8");?//设置JAVA编码。

try?{
??/*?invoke?java.lang.System.getProperties()?*/
??$props?=?java("java.lang.System")->getProperties();
??
??/*?convert?the?result?object?into?a?PHP?array?*/
??$array?=?java_values($props);
??foreach($array?as?$k=>$v)?{
????echo?"$k=>$v";?echo?"<br>n";
??}
??echo?"<br>n";
??
??/*?create?a?PHP?class?which?implements?the?Java?toString()?method?*/
??class?MyClass?{
????function?toString()?{?return?"hello?PHP?from?Java!";?}
??}
??
??/*?create?a?Java?object?from?the?PHP?object?*/
??$javaObject?=?java_closure(new?MyClass());
??echo?"PHP?says?that?Java?says:?";?echo?$javaObject;??echo?"<br>n";
??echo?"<br>n";

??echo?java("php.java.bridge.Util")->VERSION;?echo?"<br>n";

}?catch?(JavaException?$ex)?{
??echo?"An?exception?occured:?";?echo?$ex;?echo?"<br>n";
}

?

6、PHP如何调用自己编写的java类呢?

$Des3?=?new?Java("com.ksoft.security.Des3");?//实例
try{????
????echo?$Des3->encode(‘88290801‘,?$key);
????echo?"<hr>";
????echo?$Des3->decode(‘S2JFP23v0zM=‘,?$key);
}
catch(Exception?$e)?{
????echo($e);
}

?

【一些注意事项】:

关于PHP-Java-Bridge的各种函数使用:

1、高版本的java_require不再使用,也无法使用,由于放到java虚拟机下面,则不需要再手动引入包文件。

2、java_value()用于获取值,而且必须使用该函数获取值。

(特别注意:如果该值需要存入数据库,那么必须使用该java_value函数,不然会报错,或者无法存入数据库)

3、java_inspect()对实例化或者方法进行print_r类似的输出。

(注:请不要直接使用var_dump这样的输出方法输出java的类、方法、变量,需要使用java_inspect或者java_value,例如:var_dump(java_inspect($abc)))

4、实例化使用 $test = new Java("Test")的方式,如果实例化的方法中存在参数,可以这样new Java("Test","pram")

?

提醒

1、务必确保对java.inc的引用,确保引用正确

2、务必确保对jar包放在能引用的地方,比如java虚拟机jre下面

3、在PHP中调用Java使用PHP的的写法即可

?

【参考】:

1、PHP-Java-Bridge使用笔记

2、PHP-Java-Bridge的使用(平安银行支付功能专版)

3、使用php-java-bridge让PHP5支持java

4、Linux下配置php-java-bridge

?

?引用自?http://www.piaoyi.org/php/php-java-bridge-jar-class.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读