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

正 文:

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

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

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

我们再来看看具体的流程:

注意,当前最新版本是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

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 "
\n";

}

echo "
\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 "
\n";

echo "
\n";

echo java("php.java.bridge.Util")->VERSION; echo "
\n";

} catch (JavaException $ex) {

echo "An exception occured: "; echo $ex; echo "
\n";

}

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

$Des3 = new Java("com.ksoft.security.Des3"); //实例

try{

echo $Des3->encode('88290801', $key);

echo "


";

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的的写法即可

【参考】:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.安装jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe,一路next。 2.把下载的JavaBridge.jar直接用winrar打开,把这个jar包拷到 你的php目录的ext/下。 3.打开war包,面有个java的文件夹,把他全部拷到你的项目下,如/demo/java 4.目前的版本是VMBridge了,要php调用java,要先启动JavaBridge,为了以后启动方便,我在ext/下新建了一个bat文件内容如下: @echo off start javaw -jar JavaBridge.jar 保存后,双击启动 会有一个提示框选择vmbridge port 默认8080,直接点ok就行了 5.在/demo/下新建test.php内容如下: <?php require_once ( "java/Java.inc" ); header( "content-type:text/html; charset=utf-8" ); // get instance of Java class java.lang.System in PHP $system = new Java( 'java.lang.System' ); $s = new Java( "java.lang.String" , "php-java-bridge config...<br><br>" ); echo $s ; // demonstrate property access print 'Java version=' . $system ->getProperty( 'java.version' ). ' <br>' ; print 'Java vendor=' . $system ->getProperty( 'java.vendor' ). ' <br>' ; print 'OS=' . $system ->getProperty( 'os.name' ). ' ' . $system ->getProperty( 'os.version' ). ' on ' . $system ->getProperty( 'os.arch' ). ' <br>' ; // java.util.Date example $formatter = new Java( 'java.text.SimpleDateFormat' , "EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz" ); print $formatter ->format( new Java( 'java.util.Date' )); ?> 6.启动apache,在浏览器查看 http://localhost/demo/test.php 会看到如下信息: php-java-bridge config... Java version=1.6.0_10 Java vendor=Sun Microsystems Inc. OS=Windows Vista 6.0 on x86 星期日, 十一月 23, 2008 at 4:31:49 下午 国标准时间 说明成功了,你可以在php调用java了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值