laravel调用java服务_PHP通往JAVA的桥接器使用

本文介绍了如何使用PHP的JavaBridge调用Java服务,包括PHP与JavaBridge的概念、使用场景、安装配置步骤以及如何调用Java类和处理异常。通过示例代码展示了在PHP中实例化Java类并调用其方法的过程。
摘要由CSDN通过智能技术生成

桥接器是什么?

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文件(一定得绝对路径)

代码示例:

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 协议》,转载必须注明作者和本文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值