JavaBridge
有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法
一般的做法是采用php-java-bridge做桥接
1.实现原理:
先打开java的一个监听端口,php调用java的时候,将对应的方法调用转发到java的指定端口,由java执行后再将结果返回给php

Java Bridge Web应用程序包含库php-servlet.jar和php-script.jar
php-servlet.jar包含两个servlet
(1) PhpJavaServlet处理来自在Apache / IIS或命令行中运行的远程PHP脚本的请求
监听PHP / Java Bridge协议请求并调用Java方法或过程
Apache/IIS/console::PHP <--> PhpJavaServlet
<?php
require_once("http://localhost:8080/JavaBridge/java/Java.inc");
$System = java("java.lang.System");
echo $System->getProperties();
?>
(2)servlet PhpCGIServlet直接处理来自Internet客户端的请求
php-script.jar用于使用标准Java 1.6 JSR 223 API以编程方式访问所描述的功能
internet browser <--> PhpCGIServlet <--> php-cgi <--> PhpJavaServlet
2.eg:
<?php
require_once("http://localhost:8080/JavaBridge/java/Java.inc"); use java\lang\String as JString;
use java\util\ArrayList as JList; class String extends JString {
function toString () {
return "hello " . parent::toString();
}
}
$str = new String("Java"); $list = new JList();
$list->add (java_closure($str));
$list->add ("from PHP");
$ar = java_values ($list->toArray()); foreach($ar as $entry) echo "$entry<br>\n"
?>
浏览器打开,输出

说明:
(1)php需要修改配置文件
allow_url_include = On
(2)如果javaBridge没开启,会报错

try{
require_once("http://localhost:8089/JavaBridge/java/Java.inc");
}catch (Exception $e){
print $e->getMessage();
exit();
}
加上try-cach也还是一样
修改为,下面的可以避免这个问题,没开启是,提示
$url = "http://localhost:8089/JavaBridge/java/Java.inc";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, );
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,);
$dxycontent = curl_exec($ch);
if(empty($dxycontent)){
echo "没开启javaBridge";
exit();
}
3.client api
比较常用的
java_is_null(mixed $value) 检测value是否为null
java_values(object A $object) 获取值, array, Map or Collection 返回Array,确保返回值不超过php内存限制
java_server_name() server名
java_is_false(mixed $value) 检测value是否为false
java_is_true(mixed $value) 检测value是否为true
java_inspect (object A $object) 返回public fields, public methods, public classes
eg:
echo java_inspect($calendar);

其他应用实例 详见
JavaBridge的更多相关文章
- webView.loadUrl 错误:A WebView method was called on thread 'JavaBridge'.
String voicePath="file://"+MVOICEPATH; webView.loadUrl("javascript:voiceStopCallback( ...
- android 平台 java和javascript 通信问题 A WebView method was called on thread 'JavaBridge'.
java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge ...
- Android-Throwable: A WebView method was called on thread 'JavaBridge'.
错误详情: 01-30 03:36:52.441 12000-12048/cn.h5 D/@@@: e.ttt:java.lang.RuntimeException: java.lang.Throwa ...
- 【Android】java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'.
一.问题 Java调用JS事件出现 java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on th ...
- php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,该怎么解决
php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,Class.forName("com.mysql.jdbc.Driver&q ...
- Android WebView 总结 —— Java和JavaScript交互
交互如何实现 实现Java和js交互十分便捷.通常只需要以下几步. WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互接口. 客户端和网页端编写调用对方 ...
- PHP与Java进行通信
缘起: 最近做了一个电商平台与网银整合的小东西,程序是开源的 Ecmall的,网银的接口也很规范,给出的文档很全,唯一的小问题是,网银使用的签名和验签的lib是只有java和c的,对java还熟悉一些 ...
- WebView上实现Java与JavaScript交互
在安卓开发上,考虑到开发效率和界面更新,有时使用WebView结合web页面技术,可以快速迭代地开发移动应用.WebView加载资源的速度并不慢,但是如果资源多了,就很慢.图片.css.js.html ...
- 【Android】如何写一个JsBridge
JsBridge 简介 Android JsBridge 就是用来在 Android app的原生 java 代码与 javascript 代码中架设通信(调用)桥梁的辅助工具. 原文地址点这里 gi ...
随机推荐
- InstallShield卸载不彻底,残留大量dll文件
今天发现安装包Client装c盘能正常删除,但是放d盘不能删除dll文件. 1.d盘安装程序包 2.检查脚本文件,卸载时通过messagebox打印INSTALLDIR和TARGERDIR,发现均指向 ...
- Selenium (2) —— Selenium WebDriver + Grid2(101 Tutorial)
Selenium (2) -- Selenium WebDriver + Grid2(101 Tutorial) jvm版本: 1.8.0_65 selenium版本: v2.48.0 (Standa ...
- PCL中分割方法的介绍(3)
(3)上两篇介绍了关于欧几里德分割,条件分割,最小分割法等等还有之前就有用RANSAC法的分割方法,这一篇是关于区域生成的分割法, 区 域生长的基本 思想是: 将具有相似性的像素集合起来构成区域.首先 ...
- WebRTC 源码分析(二):安卓预览
有过一定相机开发经验的朋友可能会疑惑,预览还有什么好分析的,不是直接 camera.setPreviewDisplay 或者 camera.setPreviewTexture 就能在 SurfaceV ...
- PHP 打乱数组
$arr = array( array( "id"=>1, "name"=>"张三", "sex"=> ...
- [hadoop读书笔记]译者序
一.并行数据库系统 新一代高性能的数据库系统,是在MPP和集群并行计算环境的基础上建立的数据库系统. MPP:大规模并行处理计算机:Massive Parallel Processor.指的是一种处理 ...
- 第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中
第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详 ...
- GROUP BY、HAVING、AS 的用法小例子
需求: 查询选休了5门课程的学生的姓名 分析: 1. 先从 t_sc 表中查出 选了5门课的学生的学号: SELECT COUNT(code) AS countCourse,sid FROM t_sc ...
- linux自动启动的示例
linux作为服务器,经常希望一启动即可提供服务,以下命令为程序启动时,启动lhx用户下的程序: echo "su – lhx -c \"这里写入你的启动命令,Python建议使用 ...
- vegan 包进行 Bioenv 分析
Bioenv 分析通过 计算样本群落结构的距离矩阵和 环境因子的距离矩阵,计算两个距离之间的相关系数,挑选出最佳的环境因子组合: 默认情况下,计算 群落结构的距离矩阵时, 使用 Bray-Curtis ...