php 调用java类_PHP调用JAVA方法

1. PHP调用JAVA方法

1.1.  软件需求

下载php-java-bridge_6.2.1_documentation.zip,下载地址为: http://php-java-bridge.sourceforge.net/pjb/download.php

JavaBridge.jar:将上面的php-java-bridge_6.2.1_documentation.zip解压得到一个JavaBridge.war,将JavaBridge.war重命名为JavaBridge.jar,再次用WinRAR对JavaBridge.jar解压到JavaBridge目录,在JavaBridge\WEB-INF\LIB里面可以找到JavaBridge.jar和Lucene.jar。

JDK:JavaBridge是由Java语言实现的,所以必须安装JDK实现对jar文件执行提供支持。并配好环境变量。

1.2.  运行JavaBridge

双击运行JavaBridge\WEB-INF\LIB里的JavaBridge.jar,应该会弹出一个可以选择的对话框,如果没有弹出,是因为没有安装JDK或者文件关联错误,解决方法是安装JDK或者运行“start javaw -jar JavaBridge.jar”(内容保存到*.bat里面,而*.bat与JavaBridge.jar同一个目录)替代双击。弹出对话框后不用选择,直接点击“确定”即可。正确如下:

77ddebef69c3bda23e1d43eaeb652c35.png

1.3.  测试JavaBridge

在www目录下新建test.php,内容如下:

require_once("java/Java.inc");$system = new Java('java.lang.System');$s = new Java("java.lang.String", "php-java-bridge config...
");echo $s;print 'Java version='.$system->getProperty('java.version').'
';print 'Java vendor=' .$system->getProperty('java.vendor').'
';print 'OS='.$system->getProperty('os.name').' '.

$system->getProperty('os.version').' on '.

$system->getProperty('os.arch').'
';$formatter = new Java('java.text.SimpleDateFormat',

"EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");print $formatter->format(new Java('java.util.Date')).'
'.'
';

找到JavaBridge\WEB-INF\LIB里的JavaBridge.jar,解压JavaBridge.jar可以在JavaBridge\META-INF里面找到java目录,完全拷贝java目录与test.php同目录,然后运行:http://localhost/test.php,会有如下内容输出,说明JavaBridge安装成功了

e05e1e97b44cb4cfc00fcaf473b3fe6c.png

1.4.  在PHP中调用自定义的JAVA 类

先建一个测试类Test.java:

public classTest {private String name = "";//setter and getter

public voidsetName(String name) {this.name =name;

}publicString getName() {return this.name;

}//加法

public float add(float num1, floatnum2) {return num1 +num2;

}

}

编写完类,将Test.java编译生成class文件,将Test.class拷贝到C:\Program Files\Java\jre7\classes目录下,因为版本号的不同,jre7文件夹名字可能不同。安装JDK时候默认没有C:\Program Files\Java\jre7\classes,需要手动建立。

修改Test.php的内容为:

//自定义类测试

require_once("java/Java.inc");$test = new Java("Test"); //产生实例

$test->setName("哈哈,PHP调用JAVA的方法!"); //后面的调用就跟在php中调用类方法一样

print "调用类Test的getName方法,返回值为:".$test->getName()."
";print "调用Test的add方法,返回值为:".$test->add(11.2, 15.7);

b70f40a5d73ed59ea5b6019bc4479dab.png

就这个东东搞了一天才搞出来,哎 网上找了好多方法都行不通,这样每次都要把class移到jre目录里不方便,加上java_require("Test.jar"); 引用jar包却报这个错: Warning: java_require() not supported anymore. Please use

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在PHP中使用gRPC方式调用Java服务端,需要分为以下步骤: 1. 安装gRPC PHP扩展 在PHP中使用gRPC需要安装gRPC的PHP扩展。可以使用PECL来安装,命令如下: ```bash pecl install grpc ``` 安装完成后,需要在php.ini中添加以下配置: ``` extension=grpc.so ``` 2. 定义.proto文件 在Java中定义服务的.proto文件,例如: ``` syntax = "proto3"; package com.example; service MyService { rpc MyMethod (MyRequest) returns (MyResponse); } message MyRequest { string name = 1; } message MyResponse { string message = 1; } ``` 3. 生成JavaPHP代码 使用protobuf的编译器protoc来生成JavaPHP代码。可以在命令行中执行以下命令: ``` protoc --java_out=java_output_dir --grpc-java_out=java_output_dir --php_out=php_output_dir --grpc_out=php_output_dir --plugin=protoc-gen-grpc=/path/to/grpc_php_plugin my_service.proto ``` 其中,`java_output_dir`和`php_output_dir`分别是JavaPHP代码的输出目录。`/path/to/grpc_php_plugin`是gRPC PHP插件的路径。 4. 在Java中实现服务 在Java中实现MyService服务的方法,例如: ```java public class MyServiceImpl extends MyServiceGrpc.MyServiceImplBase { @Override public void myMethod(MyRequest request, StreamObserver<MyResponse> responseObserver) { String name = request.getName(); String message = "Hello, " + name + "!"; MyResponse response = MyResponse.newBuilder().setMessage(message).build(); responseObserver.onNext(response); responseObserver.onCompleted(); } } ``` 5. 在Java中启动服务 在Java中启动gRPC服务,例如: ```java Server server = ServerBuilder.forPort(8080) .addService(new MyServiceImpl()) .build() .start(); server.awaitTermination(); ``` 6. 在PHP调用服务 在PHP中实现调用Java服务的代码,例如: ```php require_once __DIR__ . '/vendor/autoload.php'; $client = new MyServiceClient('localhost:8080', [ 'credentials' => Grpc\ChannelCredentials::createInsecure(), ]); $request = new MyRequest(); $request->setName('John'); list($response, $status) = $client->MyMethod($request)->wait(); if ($status->code !== Grpc\STATUS_OK) { echo "RPC failed with status: " . $status->code . ", details: " . $status->details; } else { echo $response->getMessage(); } ``` 需要注意的是,PHP中的gRPC库可能存在一些差异,需要根据具体情况进行调整。此外,在使用gRPC时,需要确保JavaPHP的版本号一致,以免出现不兼容的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值