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 ...
随机推荐
- Android Retrofit2 数据解析
在弄数据解析这块,浪费了很长的时间,最开始一直觉得传过来用对象接收的,类型是json,往那个方式去想了.搞了很久. 后来看了别人写的才发觉,真是很简单,感谢 https://www.jianshu.c ...
- C语言 · 企业奖金发放
算法提高 企业奖金发放 时间限制:1.0s 内存限制:512.0MB 企业发放的奖金根据利润提成.利润低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10 ...
- C语言 · 递归倒置字符数组
算法提高 递归倒置字符数组 时间限制:1.0s 内存限制:512.0MB 问题描述 完成一个递归程序,倒置字符数组.并打印实现过程 递归逻辑为: 当字符长度等于1时,直接返回 否则, ...
- <【彼得林奇 投资选股智慧全集】>读书笔记
书在这里 投资公司而不是投资股市 好公司的股票迟早会有良好的表现 构建投资组合,降低投资风险 股票只是表象,上市公司才是实质,你要做的,就是搞清楚企业状况 要投资与企业,而不是投机于股市 评价股票的价 ...
- Instant Django 1.5 Application Development Starter
Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic d ...
- AJAX 简单例程示例
index.html <html> <head> <script> function showHint(str) { if (str.length==0) { re ...
- gcc命令中参数c和o混合使用的详解
gcc -c a.c 编译成目标文件a.o gcc -o a a.o 生成执行文件a.exe gcc a.c 生成执行文件a.exe gcc -o a -c a.c 编译成目标文件a gcc -o a ...
- postgresql with递归
在PostgreSQL里,with子句提供了一种方法写一个大的查询中使用的辅助报表与查询.它有助于打破复杂和大型查询简单易读的形式. 1. 建表 postgres=# create table tb9 ...
- if 语句练习 身高体重问题
public class d { /** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 int ...
- 机器学习--详解人脸对齐算法SDM-LBF
引自:http://blog.csdn.net/taily_duan/article/details/54584040 人脸对齐之SDM(Supervised Descent Method) 人脸对齐 ...