php调用java方法

由于某些原因在php里面需要调用某第三方的jar文件,于是找到了JavaBridge这个东西。

就像之前我说的那样,不同语言之间的相互调用最常用和最易于使用的就是使用第三方协议,而这之中最常用的就是Socket,所以当我看到这个东西提供的就是一个jar,于是我想,这难道是Socket通信吗?

目前提供了几种方式,如java应用程序方式和javaweb方式,即JSE和JEE方式。于是简单的测试一下,基本没有问题,于是今天先写一个东西记录一下,过几天忙完了在仔细测试一下。

方式一:

Java Desktop Apps ,我觉得应该叫applacation。

简单的测试如下,java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package bridge;
import javax.swing.JOptionPane;

public class HelloWorld {
public static final String JAVABRIDGE_PORT = "8087";
static final php.java.bridge.JavaBridgeRunner runner = php.java.bridge.JavaBridgeRunner
.getInstance(JAVABRIDGE_PORT);

public static void main(String args[]) throws Exception {
runner.waitFor();
System.exit(0);
}

public String hello(String args[]) throws Exception {
// JOptionPane.showMessageDialog(null, "hello " + args[0]);
return this.getClass().getName() + "<br>" + this + "<br/>略显犀利";
}
}

以上为几个需要的lib,值得注意的是javabridge.jar为必须,即核心工具包其他的实际为JEE端使用,一般用不到,如果需要日志输出的话,就需要log4j.jar,然后添加如下参数

即-Dphp.java.bridge.default_log_file=

-Dphp.java.bridge.default_log_level=4,其作用等同于java

-Dphp.java.bridge.default_log_file= -Dphp.java.bridge.default_log_level=4 HelloWorld

1
2
3
require_once("http://127.0.0.1:8087/JavaBridge/java/Java.inc");
$world = new java("bridge.HelloWorld");
echo $world->hello(array("from PHP"));

Java.inc实际就是一个php文件其中提供一些要调用的方法,这样说来inclide还有require什么的和js的感觉还真是非常像啊。然后再apache里面跑一下。

这里需要说一下经过测试只有localhost和127.0.0.1可以正常使用。而使用本机IP如192.168.10.71之类的则无法返回,还没有仔细看文档,也许什么地方可以设置也说不定,
然后java方如下输出。

Java方应该是使用socket模拟的http服务器,返回一个inc的php流,实际就是一个php文件,Java方自然可以根据参数反射的方式调用方法再返回,当然这只是简单的调用,
如果使用更高级的方法需要进一步看文档才自导是否可行

方式二:

Java Web apps,实际就是基于JAVA EE的应用,可融入apache,IIS,tomcat….我去,都凌晨两点了,果断去睡觉,稍后补完

很久没写东西了,由于各种原因,于是赶上这个双休日就写点吧,今天把这个文档传上来了,供简单的查询使用吧http://api.suwish.com/#java-bridge。最近想做的东西越来越多啊,纠结了。