最近工作中用到第三方的sdk包,对方提供c、java,由于会java,故选择了java的sdk。然后网络上搜索到了javabridge这个工具,可以方便php调用java。
javabridge提供了多种与不同的容器搭配的启动方法,本着简单且仅供本地使用,我直接用了java -jar JavaBridge.jar SERVLET_LOCAL:8080这样的命令启动。
先提条件:
1、安装好jdk(javabridge是要求1.4或更高,我机器是直接装的jdk8,可以通过命令行窗口输入java -version确保java已安装且是正确的版本)
2、安装好php环境(我机器装的php7.13,可以通过php -version查看信息)
步骤:
1、去http://php-java-bridge.sourceforge.net/pjb/download.php下载 JavaBridge.jar,Java.inc两个文件即可(不用下载JavaBridge.war去tomcat解压);
2、对JavaBridge.jar解压(我常用7z,rar没试过),修改解压出来的META-INF/MANIFEST.MF,在Class-Path: log4j.jar后加入依赖的包,比如我需要加lib/httpclient.jar,最后是这样的
Class-Path: log4j.jar lib/httpclient-4.1.3.jar
(注意,依赖的jar包,多个jar之间是用空格分隔,还需要注意引用的路径是相对路径)
3、将修改的好的文件重新打包成jar
3.1 先命令行cd到jar的解压包目录
3.2 执行:jar -cMf JavaBridge.jar . (意思就是把当前目录下的文件都打进JavaBridge.jar,并且不生成新的清单文件)
![](https://img.haomeiwen.com/i14473598/74b7e7c17514a6f3.png)
4、整个javabridge的文件结构如下图:
![](https://img.haomeiwen.com/i14473598/5984746f08043331.png)
5、运行javabridge
执行命令: java -jar JavaBridge.jar SERVLET_LOCAL:8080
其中端口号找到本机未使用的1024以上的端口号即可
6、php端验证,新建javabridge.php文件
<?php
define("JAVA_HOSTS", "127.0.0.1:8080");
//此处端口与第五步的端口对应
define("JAVA_LOG_LEVEL", 2);
require_once "Java.inc";
//将第一步的下载的Java.inc与当前编辑的php文件放在同一层目录
java_set_file_encoding("UTF-8");
try {
$props = java("java.lang.System")->getProperties();
$array = java_values($props);
foreach($array as $k=>$v) {
echo "$k=>$v"; echo "<br>\n";
}
echo "<br>\n";
class MyClass {
function toString() { return "hello PHP from Java!"; }
}
$javaObject = java_closure(new MyClass());
echo "PHP says that Java says: "; echo $javaObject; echo "<br>\n";
echo "<br>\n";
echo java("php.java.bridge.Util")->VERSION; echo "<br>\n";
} catch (JavaException $ex) {
echo "An exception occured: "; echo $ex; echo "<br>\n";
}
7、javabridge.php文件目录下执行 php javabridge.php,输出信息即可证明php调用java是ok的,现在可以调用java下的类和方法了,enjoy!
网友评论