有的时候我们需要在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. Android Retrofit2 数据解析

    在弄数据解析这块,浪费了很长的时间,最开始一直觉得传过来用对象接收的,类型是json,往那个方式去想了.搞了很久. 后来看了别人写的才发觉,真是很简单,感谢 https://www.jianshu.c ...

  2. C语言 · 企业奖金发放

    算法提高 企业奖金发放   时间限制:1.0s   内存限制:512.0MB      企业发放的奖金根据利润提成.利润低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10 ...

  3. C语言 · 递归倒置字符数组

    算法提高 递归倒置字符数组   时间限制:1.0s   内存限制:512.0MB      问题描述 完成一个递归程序,倒置字符数组.并打印实现过程 递归逻辑为: 当字符长度等于1时,直接返回 否则, ...

  4. <【彼得林奇 投资选股智慧全集】>读书笔记

    书在这里 投资公司而不是投资股市 好公司的股票迟早会有良好的表现 构建投资组合,降低投资风险 股票只是表象,上市公司才是实质,你要做的,就是搞清楚企业状况 要投资与企业,而不是投机于股市 评价股票的价 ...

  5. Instant Django 1.5 Application Development Starter

    Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic d ...

  6. AJAX 简单例程示例

    index.html <html> <head> <script> function showHint(str) { if (str.length==0) { re ...

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

  8. postgresql with递归

    在PostgreSQL里,with子句提供了一种方法写一个大的查询中使用的辅助报表与查询.它有助于打破复杂和大型查询简单易读的形式. 1. 建表 postgres=# create table tb9 ...

  9. if 语句练习 身高体重问题

    public class d { /** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 int ...

  10. 机器学习--详解人脸对齐算法SDM-LBF

    引自:http://blog.csdn.net/taily_duan/article/details/54584040 人脸对齐之SDM(Supervised Descent Method) 人脸对齐 ...