当前位置: 首页 > news >正文

php中调用java类的方法

在网上找了一个用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即可。

相关文章:

  • 利用SWFTools工具将pdf转换成swf
  • Thrift-java学习小结
  • Flex:使用FlexPaper显示PDF文档
  • SWFObject2.0两种调用方式
  • 异构SOA系统架构之Asp.net实现(兼容dubbo)
  • Spring核心技术(十一)——基于Java的容器配置(一)
  • 让网站禁止某些邮箱的注册
  • oschina github使用指南
  • VC++ 命名空间
  • 数据库字段类型
  • C++对C的扩充(1)
  • JS中创建对象的方法及json
  • C++对C的扩充(2)
  • Chapter1-data access reloaded:Entity Framework(下)
  • 第四讲:面向对象程序设计方法及类、对象的概念
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 【知识碎片】第三方登录弹窗效果
  • 77. Combinations
  • git 常用命令
  • Javascript弹出层-初探
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • MySQL的数据类型
  • spring-boot List转Page
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • vue脚手架vue-cli
  • 给Prometheus造假数据的方法
  • 和 || 运算
  • 如何学习JavaEE,项目又该如何做?
  • 深度学习在携程攻略社区的应用
  • 深度学习中的信息论知识详解
  • 我是如何设计 Upload 上传组件的
  • 移动端 h5开发相关内容总结(三)
  • #pragma once与条件编译
  • (1)STL算法之遍历容器
  • (8)STL算法之替换
  • (c语言)strcpy函数用法
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (力扣)1314.矩阵区域和
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)Linux+Windows下安装ffmpeg
  • (转)ObjectiveC 深浅拷贝学习
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • [《百万宝贝》观后]To be or not to be?
  • [HCIE] IPSec-VPN (手工模式)
  • [Java]快速入门二叉树,手撕相关面试题
  • [Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目
  • [leetcode] 3Sum
  • [LeetCode周赛复盘] 第 310 场周赛20220911
  • [Noi2015]程序自动分析
  • [Oh My C++ Diary]return 1和return 0的区别
  • [p4] Uncheckout other user‘s file?