TP5項目中配置php_java_bridge並調用自定義jar包中的類


        背景:最近公司接入第三方支付,提供了相關jar包,但是公司項目使用的是TP5框架,故此研究了一下TP5項目中配置php_java_bridge來調用jar包的方法。
        先本地windows上配置測試,測試成功後再通過寶塔面板配置到centos7環境中,通過寶塔面板配置步驟相對簡單。


        一、安裝Java。windows下的安裝可參考網上的教程,centos7中通過寶塔面板,可以直接安裝tomcat8,也可以安裝Java項目管理器,通過它安裝tomcat8,安裝tomcat8會附帶安裝jdk1.8。

        二、配置php_java_bridge。


1、下載JavaBridgeTemplate721.war
    進入網站http://sourceforge.net/projects/php-java-bridge/files,選擇Binarypackage,
    然後選擇最新的版本Php-java-bridge_7.2.1,下載JavaBridgeTemplate721.war;
2、把JavaBridgeTemplate721.war放到tomcat下webapps,
    啓動tomcat,tomcat就會解析該文件,然後產生一個同名文件夾,tomcat的在這裏的主要作用就是這個(用完可以關掉);
3、啓動方法。

    進入該文件夾下/WEB-INF/lib目錄,
    windows執行命令:java -jar JavaBridge.jar SERVLET_LOCAL:8081 &
    linux下執行命令:java -jar /www/server/tomcat8/webapps/JavaBridgeTemplate721/WEB-INF/lib/JavaBridge.jar SERVLET_LOCAL:8081 &

也可在配置文件中添加此命令開機執行(rc.local 文件要配置執行權限!否則無效):

編輯     vi /etc/rc.local

將命令添加到結尾,注意這裏肯定要JavaBridge.jar的完整路徑;

爲確保JavaBridge.jar保持運行狀態,可以通過寶塔面板添加計劃任務,選擇shell腳本,腳本內容如下:

#!/bin/bash
#判斷進程是否存在,如果不存在就啓動它
PIDS=`ps -ef |grep 'JavaBridge.jar' |grep -v grep | awk '{print $2}'`
if [ "$PIDS" == "" ]; then
echo "JavaBridge.jar is starting!"
#else
#運行進程
java -jar /www/server/tomcat8/webapps/JavaBridgeTemplate721/WEB-INF/lib/JavaBridge.jar SERVLET_LOCAL:8081 &
fi

        三、對第三方提供的jar包,通過安裝eclipse插件查看源碼進行重寫,或者瞭解jar包中要調用類的路徑。調試OK後將項目導出爲可運行的jar文件(如果選擇的不是該選項,linux環境中可能調用不到),複製到步驟一安裝目錄下的jdk1.8.0_181\jre\lib\ext文件夾中。

        四、TP5項目中,使用composer安裝php_java_bridge依賴包,命令:composer require soluble/japha,安裝包地址:https://packagist.org/packages/soluble/japha。

TP5項目中調用示例:

use Soluble\Japha\Bridge\Adapter as BridgeAdapter;
use Soluble\Japha\Bridge\Exception as BridgeException;

class Rsautil
{

    private $bridge;
    private $java;

    public function __construct()
    {


        #--實例化php_java_bridge:
        $options = [
            'servlet_address' => 'localhost:8081/php-servlet.jar',
            'driver' => 'pjb62'
        ];
        try {
            #--實例化java類:
            $java = $this->java = new BridgeAdapter($options);

            #--測試調用java系統類:
            /*$props = $java->java("java.lang.System")->getProperties();
            $array = $java->values($props);
            foreach ($array as $k => $v) {
                echo "$k=>$v";
                echo "<br>\n";
            }
            echo "<br>\n";*/


            #--調用自定義java類:
            $this->bridge = $java->java("com.third.ReadP12Cert");
        } catch (BridgeException\ConnectionException $e) {
            #--無法訪問服務器:
            echo $e->getMessage();
        }

    }


    /**
     * 調用jar包中的loadPrivateKey類,從證書文件中裝入私鑰
     * @return 私鑰
     * @throws Exception
     */
    public function loadPrivateKey()
    {


        $res = self::$bridge->loadPrivateKey();
        $res = $this->java->values($res);

        ($res) or die('您使用的私鑰格式錯誤,請檢查私鑰配置');

        return $res;

    }


}

 

       在此實踐過程中,參考過很多先行者的文章,這裏特別鳴謝,因參考文章太多,這裏就不一一列出了。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章