php调用java

工作中遇到了php需要调用jar功能;在此整理下。

准备工作:

1、php环境;

2、java环境;

3、JavaBridge环境;

JavaBridge是由Java语言实现的,所以必须安装JDK实现对jar文件执行提供支持。并配好环境变量;这里我们主要说下JavaBridge环境;

1、下载JavaBridge;

地址:PHP/Java Bridge

2、将下载下来的php-java-bridge_7.2.1_documentation.zip进行解压;解压后文件夹中有个JavaBridge.war文件,将JavaBridge.war重命名为JavaBridge.jar;再将JavaBridge.jar解压,得到JavaBridge文件夹;如图:

在JavaBridge\WEB-INF\lib里面可以找到JavaBridge.jar。

双击运行JavaBridge\WEB-INF\lib里面的JavaBridge.jar;会有弹窗,如果没有,可能是没安装JDK,或环境没有配置好,解决办法,安装JDK,或者运行“start javaw -jar JavaBridge.jar”,会出现如下弹窗,点击确定;

以上JavaBridge已经运行起来了。

3、测试JavaBridge.jar

3.1找到JavaBridge\WEB-INF\lib里的JavaBridge.jar,解压JavaBridge.jar后可以在解压后的文件夹JavaBridge\META-INF里面找到java目录,完全拷贝java目录放在自己项目需要的位置,方便测试,我放在和php的demo代码同一个目录了。

3.2准备一个测试的jar

编写Test.java

  1. public class Test { 

  2.     private String name = ""; 

  3.     public Test() { 

  4.     } 

  5.     public void setName(String var1) { 

  6.         this.name = var1; 

  7.     } 

  8.     public String getName() { 

  9.         return this.name; 

  10.     } 

  11.     public float add(float var1, float var2) { 

  12.         return var1 + var2; 

  13.     } 

  14. }

然后执行命令进行编译,得到Test.class

javac Test.java

再进行jar打包

jar cvf Test.jar Test.class

将Test.jar复制到C:\Program Files\Java\jre1.8.0_301\lib\ext;这里是我java安装位置,根据自己安装目录进行调整;

3.3 php测试文件demo.php

先调用java系统函数测试

require_once("java/Java.inc");
$system = new Java('java.lang.System');
$formatter = new Java('java.text.SimpleDateFormat',    "EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");
print iconv("utf-8", "gbk", $formatter->format(new Java('java.util.Date'))).' <br>'.' <br>';
echo "<br/>";

运行demo.php,结果如下

然后我们测试下前面写的自定义的jar包

require_once("java/Java.inc");
$test = new Java("Test"); //产生实例
$test->setName("HelloWorld"); //后面的调用就跟在php中调用类方法一样
echo "调用类Test的getName方法,返回值为:";echo $test->getName();
echo "<br/>";

再次运行,结果如下:

还有个问题就是直接这样是没问题的,可以得到想要的数据

echo $test->getName();

如果是这样写的,就有如下的错误:

$name=$test->getName();
var_dump($name); //或者这样写print_r($name);
//或者这样
$data=array(
    "name"=>$name
);
var_dump($data);

我试了下,如果直接把name变量写到文本文件里面也正常的,但是放在数组里面json之后放文本文件就不行了,和页面一样的,一堆这样的错误;这时候我们需要给name强制转换下前面加上(string)$name,这样写就没问题了。为什么会这样我也没太搞懂。

$name=$test->getName();
var_dump((string)$name); //或者这样写print_r((string)$name);
//或者这样
$data=array(
    "name"=>(string)$name
);
var_dump($data);

如果提示如下:

可能是因为Test.jar包并没有复制到对应目录,我们可以看下JavaBridge.log日志,此日志文件同上面双击运行JavaBridge.jar一个目录

这里有提示jar包应该存放位置;如果确定复制过去了,可能是先运行的,后将jar包复制过去没加载进去导致的,把之前的JavaBridge.jar重新启动下就好了,(记得把原来的进程杀死,不然启动的是两个,看弹窗端口即可知晓。)

以上就完成了php调用jar完整流程。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值