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 ...
随机推荐
- Ubuntu 12.04 LTS(64 bit) + RTL8188CU无线网卡驱动
. . . . . 之前家里台式机上安装的是win7+CentOS双系统,但是CentOs的无线网卡驱动不知为何无论如何都安装不上,再加上这段时间一直很忙,所以一直使用着win.这几天事情忙得差不多了 ...
- 快速排序,一个爱情故事-java版
public static void myquicksort(int[] ages,int girl,int boy){ //这是一个站在数组两端,追求完美爱情的故事 //年龄不匹配的不要 //第0步 ...
- mysql hive sql 进阶
场景: 说明.1.上面的数据是经过规整的数据,step是连续的,这个可以通过row_number实现.连续是必要的一个条件因为在计算第二个查询条件时依赖这个顺序,如果step不是数字字段可以截取然后转 ...
- MySQL日志——二进制日志
Mac怎么这么坑呢,搞了2小时了.唉 先来一个简单的,挖好坑,明天解决. 终端进入mysql: mysql> set global general_log=on; 然后进行数据库的任意操作: 查 ...
- 依赖注入(Dependency Injection)
Spring的两个核心内容为控制反转(Ioc)和面向切面(AOP),依赖注入(DI)是控制反转(Ioc)的一种方式. 依赖注入这个词让人望而生畏,现在已经演变成一项复杂的编程技巧 或设计模式理念.但事 ...
- Virtools元素、类和面向对象设计
无意中发现了在某个不存在的网站( https://sites.google.com )上,还存有09年写的一些半成品教材,下面这篇文章就是其中一部分. 概述 Virtools将元素(Element)组 ...
- 阻止SPY++类似的程序捕捉软件窗口
我以前用Spy++能轻易捕捉360软件界面,除了一些应用DHTML制作的窗体.昨天我再用Spy++捕捉的时候捕捉不到了,甚至连最外围的对话框都捕捉不到,显然是做了类似拦截API的处理.下面我也模拟一下 ...
- Pycharm Professional破解(windows,mac)
激活码 EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEwMUlXU1dEIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lI ...
- Android训练课程(Android Training) - NFC基础
NFC 基础 本文档介绍了在Android上的基本的NFC任务.它说明了如何发送和接收的NDEF消息(NDEF messages)的形式的表单里包含的NFC数据(NFC data),并介绍Androi ...
- js 添加天数
//日期加上天数得到新的日期 //dateTemp 需要参加计算的日期,days要添加的天数,返回新的日期,日期格式:YYYY-MM-DD function getNewDay(dateTemp, d ...