• JavaBridge


     有的时候我们需要在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 javalangString as JString;
    use javautilArrayList 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>
    "
    ?>

     浏览器打开,输出

     说明:

      (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, 1); 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10); 
    $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); 

      

     其他应用实例 详见

  • 相关阅读:
    利用async和await异步操作解决node.js里面fs模块异步读写,同步结果的问题
    node.js的fs核心模块读写文件操作 -----由浅入深
    node.js 发布订阅模式
    js 发布订阅模式
    vue.js定义一个一级的路由 ----由浅入深
    vue.js编程式路由导航 --- 由浅入深
    vue.js嵌套路由-------由浅入深
    Spring事件体系
    Hibernate监听器
    学习网站地址
  • 原文地址:https://www.cnblogs.com/baby123/p/8808973.html
Copyright © 2020-2023  润新知