有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法

一般的做法是采用php-java-bridge做桥接

1.实现原理:

  先打开java的一个监听端口,php调用java的时候,将对应的方法调用转发到java的指定端口,由java执行后再将结果返回给php

Java Bridge Web应用程序包含库php-servlet.jarphp-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的更多相关文章

  1. webView.loadUrl 错误:A WebView method was called on thread 'JavaBridge'.

    String voicePath="file://"+MVOICEPATH; webView.loadUrl("javascript:voiceStopCallback( ...

  2. 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 ...

  3. 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 ...

  4. 【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 ...

  5. php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,该怎么解决

    php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,Class.forName("com.mysql.jdbc.Driver&q ...

  6. Android WebView 总结 —— Java和JavaScript交互

    交互如何实现 实现Java和js交互十分便捷.通常只需要以下几步. WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互接口. 客户端和网页端编写调用对方 ...

  7. PHP与Java进行通信

    缘起: 最近做了一个电商平台与网银整合的小东西,程序是开源的 Ecmall的,网银的接口也很规范,给出的文档很全,唯一的小问题是,网银使用的签名和验签的lib是只有java和c的,对java还熟悉一些 ...

  8. WebView上实现Java与JavaScript交互

    在安卓开发上,考虑到开发效率和界面更新,有时使用WebView结合web页面技术,可以快速迭代地开发移动应用.WebView加载资源的速度并不慢,但是如果资源多了,就很慢.图片.css.js.html ...

  9. 【Android】如何写一个JsBridge

    JsBridge 简介 Android JsBridge 就是用来在 Android app的原生 java 代码与 javascript 代码中架设通信(调用)桥梁的辅助工具. 原文地址点这里 gi ...

随机推荐

  1. Ubuntu 12.04 LTS(64 bit) + RTL8188CU无线网卡驱动

    . . . . . 之前家里台式机上安装的是win7+CentOS双系统,但是CentOs的无线网卡驱动不知为何无论如何都安装不上,再加上这段时间一直很忙,所以一直使用着win.这几天事情忙得差不多了 ...

  2. 快速排序,一个爱情故事-java版

    public static void myquicksort(int[] ages,int girl,int boy){ //这是一个站在数组两端,追求完美爱情的故事 //年龄不匹配的不要 //第0步 ...

  3. mysql hive sql 进阶

    场景: 说明.1.上面的数据是经过规整的数据,step是连续的,这个可以通过row_number实现.连续是必要的一个条件因为在计算第二个查询条件时依赖这个顺序,如果step不是数字字段可以截取然后转 ...

  4. MySQL日志——二进制日志

    Mac怎么这么坑呢,搞了2小时了.唉 先来一个简单的,挖好坑,明天解决. 终端进入mysql: mysql> set global general_log=on; 然后进行数据库的任意操作: 查 ...

  5. 依赖注入(Dependency Injection)

    Spring的两个核心内容为控制反转(Ioc)和面向切面(AOP),依赖注入(DI)是控制反转(Ioc)的一种方式. 依赖注入这个词让人望而生畏,现在已经演变成一项复杂的编程技巧 或设计模式理念.但事 ...

  6. Virtools元素、类和面向对象设计

    无意中发现了在某个不存在的网站( https://sites.google.com )上,还存有09年写的一些半成品教材,下面这篇文章就是其中一部分. 概述 Virtools将元素(Element)组 ...

  7. 阻止SPY++类似的程序捕捉软件窗口

    我以前用Spy++能轻易捕捉360软件界面,除了一些应用DHTML制作的窗体.昨天我再用Spy++捕捉的时候捕捉不到了,甚至连最外围的对话框都捕捉不到,显然是做了类似拦截API的处理.下面我也模拟一下 ...

  8. Pycharm Professional破解(windows,mac)

    激活码 EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEwMUlXU1dEIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lI ...

  9. Android训练课程(Android Training) - NFC基础

    NFC 基础 本文档介绍了在Android上的基本的NFC任务.它说明了如何发送和接收的NDEF消息(NDEF messages)的形式的表单里包含的NFC数据(NFC data),并介绍Androi ...

  10. js 添加天数

    //日期加上天数得到新的日期 //dateTemp 需要参加计算的日期,days要添加的天数,返回新的日期,日期格式:YYYY-MM-DD function getNewDay(dateTemp, d ...