php调取java类方法,jar包,亲测已上线!windows!

需求:  因为国密签名Sm2 sm3加密算法,在php端略显无力!

             对接的三方也只有java的demo, 而且.sm2文件 php好像也解析不开!

             方案:

                        1:建立java环境 web容器  创造接口把加密放进去 让php请求

                        2:建立java环境 用本地插件形式调取java-jar包!

显然第二种更简便, 只为了一个加密算法而言!

  第一步:准备java环境

                这里我在官网下载了1.8 的exe进行一键安装!

Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/#java8-windows

 第二部:准备衔接php与java的环境

                PHP/Java Bridgeicon-default.png?t=M85Bhttps://php-java-bridge.sourceforge.net/pjb/download.php

                

红框内点击即可下载, 

第三步:javaBridge.jar 放到你自定义的位置,因为要用cmd使用!

        

 该目录下运行jar包!

注意:一开始是没有JavaBridge.lo文件,第一次运行后就会出现!

Java.inc文件暂时先放同目录,后面编写php会使用到

运行后有小弹窗!

点击确定即可!此时两个语言衔接的环境就搭建好了!

第四步:开始编写一个java类文件!

        下载idea编辑器! 我是体验的30天哈~

        

 

目录结构于此! 此时就会默认创建一个主函数!man 

我们修改一下!

 此时,我们知道add方法是运行无误的!我们等会就调取add方法即可!

 我们开始打包!

 

 

 

 

 

 

此时我们简单的类包就封好了,我们就调取这个jar包的 add方法! 

第六步:把jar放到正确位置,然后重启JavaBridge.jar

        先看下我们应该把打包好的jar 放到哪个位置!

        找到我们第一次运行环境时自动创建的log文件,

        

         就放到该目录下, 放过去之前先把环境关掉Crtl+c退出环境

记号我们打包好的jar文件,类文件的目录结构!

 目录结构为: org.example.Main    一定不要写错!!!!!!

 

放置好后重新启动下环境!我们开始写php!

第七步:编写php调取java类方法

        1:小结 先用原生php 写一下! 与框架写法有一点点差距!下面会讲!

           注意看,我引用了之前下载的Java.inc文件!

           改文件必须放到php可以加载到的目录哦!否则无法链接成功!

<?php 

include_once("WEB-INF/lib/Java.inc");
try {
  $model = new java("org.example.Main");
  $props = $model->add((int) 1,(int) 2);
  $array = java_values($props);
  var_dump($array); 
exit();
} catch (JavaException $ex) {
  echo "An exception occured: "; echo $ex; echo "<br>\n";
}

 我们运行输出一下!是不是可以了呢!

 2:我们开始编写一下框架的写法!我这里使用的TP5.1

try{
    $model = java("org.example.Main");
    $props = $model->add((int) 1,(int) 2);
    $array = java_values($props);
    $arr = json_decode($array,true);
    var_dump($arr); 
}catch (\JavaException $ex) {
    echo "An exception occured: "; echo $ex; echo "<br>\n";
}

       加载inc文件正常加载!

        差异在于调取插件的时候 不是new java() 而是直接 java(),

        在框架内new java() 会找不到类,

        框架内 java()   java_values    以及异常类 JavaException 在编辑器可能会报错!这个不用在意!

        解析java的返回值时务必请使用java_values,以防出现不必要的麻烦!

重中之重来了!!!!

        如果你写的java类里面包含读取文件!  

        当你单独运行java类的时候是没有问题的!但是从php调取就会找不到文件!

        因为你当前运行的环境目录是在php! 请以php目录为准!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java中,内部可以直接访问外部的成员(包括方法和字段),即使它们是私有的。你可以通过以下几种方式在内部中调用外部方法: 1. 在内部方法中使用外部的实例:如果内部是非静态的,你可以通过创建外部的实例来调用外部方法。例如: ```java public class OuterClass { private void outerMethod() { System.out.println("Outer method"); } public class InnerClass { public void innerMethod() { outerMethod(); // 调用外部方法 } } } ``` 在上面的例子中,内部InnerClass可以直接调用外部OuterClass的方法outerMethod()。 2. 在静态内部中使用外部方法:如果内部是静态的,它不能直接访问外部的实例方法,但可以通过创建外部的实例或使用外部名来调用外部的静态方法。例如: ```java public class OuterClass { private static void outerStaticMethod() { System.out.println("Outer static method"); } public static class InnerClass { public void innerMethod() { OuterClass.outerStaticMethod(); // 通过外部名调用外部的静态方法 } } } ``` 在上面的例子中,内部InnerClass可以通过OuterClass.outerStaticMethod()来调用外部OuterClass的静态方法。 请注意,如果内部是私有的,它只能在外部的内部访问。如果你需要在外部外部访问内部方法,你可以提供一个公共的方法在外部中调用内部方法。 希望这个回答能够解决你的问题。如果还有其他疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值