PHP通往JAVA的桥接器使用
桥接器是什么?
PHP与JavaBridge是在PHP和Java之间搭建一座桥梁利用这周桥梁在两个实体之间建立起一个沟通渠道,在这座桥梁的帮助下,你可以在Java中开发类,然后在PHP中调用它们的方法,同样,在你的Java桌面或Web应用程序中也可以使用PHP脚本。
具体详细说明参考:php-java-bridge.sourceforge.net/pjb...
简易理解就是,想要在PHP中调用java相关的方法!
使用场景
一般笔者在使用桥接器的情况下有两种情况,一种是PHP和JAVA之间进行加解密服务提供,当PHP难以模拟JAVA加密解密方式时,JAVA方提供加解密jar包供第三方使用,恰巧第三方为PHP,那么桥接器就派上用场了,另一种就是,JAVA有很多实用的第三方包,可以通过桥接器拿来使用!
如何使用JavaBridge?
1、本地服务或liunx安装jdk,参考:www.kancloud.cn/lijianlin/jishulli...
2、下载PHP依赖文件,Java.inc和JavaBridge.jar,下载地址:php-java-bridge.sourceforge.net/pjb...
3、使用方式
在php代码中引入Java.inc文件(一定得绝对路径)
代码示例:
<?php
namespace icbcjoin\src\icbc;
// 引入Java.inc文件
require_once(env('extend_path') . "icbcjoin/src/icbc/java/Java.inc");
// use icbcjoin\src\icbc\BaseIcbc;
use icbcjoin\src\icbc\Common;
// class Icbc extends BaseIcbc
class Icbc {}
找到存在JavaBridge.jar包的目录下,开启他
java -jar JavaBridge.jar SERVLET_LOCAL:8081 &
4、调用JAVA的jar包
调用java里面的类,就和php实例化控制器类似
$InternetHaipeUtils = new \Java('com.abcd.internetdecryption.util.InternetHaipeUtils');
// 通过 new \Java()方法去实例化,然后调用里面的方法使用php箭头方式代替java里面的点模式即可了
KeyPairParam rsaKeyPair = InternetHaipeUtils.getRsaKeyPair();
String privateKey = rsaKeyPair.getPrivateKey();
String publicKey = rsaKeyPair.getPublicKey();
// 以上java代码示例
// php如何调用实现
// 初始化他
$InternetHaipeUtils = new \Java('com.abcd.internetdecryption.util.InternetHaipeUtils');
$privateKey = $InternetHaipeUtils->getPrivateKey(); // 将点模式转换成->模式即可
// 那如果初始化的实例中需要带入构造参数,如何实例化?
new EncryptRequestParam(content, publicKey, privateKey)
// 笔者百度没找到,很苦恼,如何指的看源码才发现很简单
// 只需要 new \Java(类名,构造参数,构造参数2,...,...) 即可实现
new \Java(
'com.abcd.internetdecryption.param.EncryptRequestParam',
$apigw_data,
$sign,
$this->_icbc_key
)
异常解决
笔者在做这件事的时候,也是感觉很简单,很顺利,然后呢?还有什么要讲的么?
当然,毕竟玩的是别人的jar包,如果jar报错了,怎么办?我还想程序继续执行,我只是想着调jar包失败而已,告诉错误就好了,别把我程序给关了,如何解决?
笔者使用的是简单粗暴的方案解决的,直接使用error_reporting(0);忽略jar包里面的错误!
那么error_reporting(0);放在那里呢?如果放在全局肯定不行,放在类中也不行,放在函数的第一行也不行,因为如果放在上面会将你可能需要抛出的错误也忽略掉了,所以笔者采用如下方案完美解决
try {
$InternetHaipeUtils = new \Java('com.abcd.internetdecryption.util.InternetHaipeUtils');
$decryptContent = (string)$InternetHaipeUtils->decrypt(
new \Java(
'com.abcd.internetdecryption.param.DecryptRequestParam',
$apigw_data,
$sign,
$this->_icbc_key
)
);
} catch (\Exception $e) {
error_reporting(0);
return [
'status' => false,
'timestamp' => date('Y-m-d H:i:s'),
'pub_code' => '42000',
'message' => '签名验证失败',
];
}
结语
还有什么是PHP不能干的!服务器shell脚本直接干他!HTML直接干他!JAVA照样干他!哈哈!!!
PS:PHP是世界上最好的语言没有之一!
本作品采用《CC 协议》,转载必须注明作者和本文链接
大佬666
呵呵,有啊,无法提高qps