在网上找了一个用java写的计算词语相似度的程序,但是想在php中去调用它,所以这两天就研究了一下在php中调用java类的方法。这里要感谢http://blog.sina.com.cn/s/blog_51a5e5f40100cxie.html这篇文章的作者,我主要是借鉴这篇文章去做的,期间也遇到了很多问题,最后在师弟kevin的帮助得以解决,真的非常感谢他。废话少说,进入正题。
我的整个配置环境如下:
OS:win7
apache:2.2
PHP:5.2
JDK:1.6
php-java-bridge和java.inc: 5.5.2 下载地址:http://sourceforge.net/projects/php-java-bridge/files/
php-java-bridge的配置过程如下:
将下载的JavaBridge.jar放到php的ext目录下,同时双击运行,并且根据选择的端口号相应修改java.inc中的#define ("JAVA_HOSTS", "127.0.0.1:8787")为define ("JAVA_HOSTS", "127.0.0.1:选择的端口号"),注意去掉前面的#号。
编写自己的Java类,实现PHP调用自定义的Java类:
首先编写java类源文件,命名为Test.java,源码如下:
public class Test
{
private String name = "";
//setter and getter
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
//加法
public float add(float num1, float num2)
{
return num1 + num2;
}
}
编写完类,将Test.java编译生成class文件,通过JavaBridge来调用我们需要打成jar包,在cmd下执行:jar cf Test.jar Test.class命令打包生成Test.jar包。将生成的jar包拷贝到apache的web应用根目录之下,我这里放到phpjava目录,同时将java.inc也拷到该目录下。接下来我们就可以在PHP中调用了,编写test.php文件放入phpjava目录,代码如下:
PHP代码:
<?php
require_once("Java.inc"); //必须包含的配置文件
java_require("Test.jar"); //引用包含的jar包
$test = new Java("Test"); //产生实例
$test->setName("哈哈,PHP调用JAVA的方法!"); //后面的调用就跟在php中调用类方法一样
echo "调用类Test的getName方法,返回值为:".$test->getName()."<br>";
echo "调用Test的add方法,返回值为:".$test->add(11.2, 15.7);
?>
运行输出结果为:调用类Test的getName方法,返回值为:哈哈,PHP调用JAVA的方法!
调用Test的add方法,返回值为:26.9
注意问题:1.比较高版本的JavaBridge.jar不支持java_require()方法,不知道什么原因,所以我用了低一点的版本;2.apache的版本也是一个问题,有的版本的apache使得输出结果为Object id #XX;3.运行时必须打开JavaBridge.jar;4.php输出时有时中文会是乱码,这时将php程序文件保存为utf-8格式,同时令网页中的charset=UTF-8即可。