工作中遇到了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文件夹;如图:
在JavaBridgeWEB-INFlib里面可以找到JavaBridge.jar。
双击运行JavaBridgeWEB-INFlib里面的JavaBridge.jar;会有d窗,如果没有,可能是没安装JDK,或环境没有配置好,解决办法,安装JDK,或者运行“start javaw -jar JavaBridge.jar”,会出现如下d窗,点击确定;
以上JavaBridge已经运行起来了。
3、测试JavaBridge.jar
3.1找到JavaBridgeWEB-INFlib里的JavaBridge.jar,解压JavaBridge.jar后可以在解压后的文件夹JavaBridgemeta-INF里面找到java目录,完全拷贝java目录放在自己项目需要的位置,方便测试,我放在和php的demo代码同一个目录了。
3.2准备一个测试的jar
编写Test.java
public class Test {
private String name = "";
public Test() {
}
public void setName(String var1) {
this.name = var1;
}
public String getName() {
return this.name;
}
public float add(float var1, float var2) {
return var1 + var2;
}
}
然后执行命令进行编译,得到Test.class
javac Test.java
再进行jar打包
jar cvf Test.jar Test.class
将Test.jar复制到C:Program FilesJavajre1.8.0_301libext;这里是我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'))).'
'.'
'; echo "
";
运行demo.php,结果如下
然后我们测试下前面写的自定义的jar包
require_once("java/Java.inc"); $test = new Java("Test"); //产生实例 $test->setName("HelloWorld"); //后面的调用就跟在php中调用类方法一样 echo "调用类Test的getName方法,返回值为:";echo $test->getName(); echo "
";
再次运行,结果如下:
还有个问题就是直接这样是没问题的,可以得到想要的数据
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重新启动下就好了,(记得把原来的进程杀死,不然启动的是两个,看d窗端口即可知晓。)
以上就完成了php调用jar完整流程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)