• 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可以加载到的目录哦!否则无法链接成功!

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

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

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

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

           加载inc文件正常加载!

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

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

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

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

    重中之重来了!!!!

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

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

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

  • 相关阅读:
    腾讯云服务器与普通服务器区别在哪?如何选择?
    Vue3 简单实现虚拟Table,展示海量单词.利用WebAPI speechSynthesis,朗读英语单词
    异或最小生成树
    玩一玩WolframAlpha计算知识引擎
    Linux驱动应用层与内核层之间的数据传递
    基于node.js+vue基于Android的宿舍管理系统的设计与实现(开题+程序+论文)计算机毕业设计
    Qt常用快捷键
    Vue框架总结(二、Vue计算属性与监听属性)
    技术学习:Python |欲先善其事,必先利其器(JSON)二
    我被这个浏览了 746000 次的问题惊住了
  • 原文地址:https://blog.csdn.net/weixin_42616063/article/details/127817366