php调用java

php调用java,第1张

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文件夹;如图:

在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完整流程。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5703673.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存