java怎麼實現php,JAVA怎麼實現換行

本文目錄一覽:

java系統和php系統整合,如何實現單點登陸

1、直接網上找一個單點登錄系統,把這2個系統整合到一起,

2、自己寫一個單點登錄系統,藉助中間表,比如你以java系統為主,在java系統裡面嵌入了php系統,當點擊php系統的欄目時就先去中間表check一下,然後直接跳到你的php系統上面就好,

3、如果沒有許可權啥的,你就直接放一個連接傳用戶名和密碼直接登錄訪問也行。

php開發的對資料庫的操作,用Java怎麼實現

比較PHP和JSP這兩個Web開發技術,在目前的情況是其實是比較PHP和Java的Web開發。以下是我就幾個主要方面進行的比較:

一、 語言比較

PHP是解釋執行的伺服器腳本語言,首先php有簡單容易上手的特點。語法和c語言比較象,所以學過c語言的程序員可以很快的熟悉php的開發。而java需要先學好java的語法和熟悉一些核心的類庫,懂得面向對象的程序設計方法。所以java不如php好學。

Java首先要編譯成位元組碼.class文件,然後在java虛擬機上解釋執行。Java的Web開發首先最容易想到的就是JSP(現在已經到JSP2.0),原來的java的Web開發都是用servlet來實現的,用servlet來開發需要程序員在java的源文件中嵌入大量的html代碼。所以後來就出現了JSP,JSP可以方便的嵌入到html文件當中,其實jsp文件在伺服器上執行的時候首先會被應用伺服器轉換成servlet,然後再編譯執行。Jsp可以通過servlet和JavaBean的支持產生強大的功能。JavaBean 是一種可復用的、跨平台的軟體組件。使用javabean可以方便的實現java代碼和html的分離,能夠增強系統的功能和軟體的復用性。

Java的Web開發屬於SUN公司定義的J2EE其中的規範。而且在J2EE中包括了java的Web開發的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特別適合於做大型的企業級的應用。

二、 資料庫訪問比較

Java通過JDBC來訪問資料庫,通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫。訪問資料庫的介面比較統一。

PHP對於不同的資料庫採用不同的資料庫訪問介面,所以資料庫訪問代碼的通用性不強。例如:用Java開發的Web應用從MySQL資料庫轉到Oracle資料庫只需要做很少的修改。而PHP則需要做大量的修改工作。

三、 系統設計架構比較

採用Java的Web開發技術,需要使用的是面向對象的系統設計方法,而PHP還是採用面向過程的開發方法。所以用Java進行開發前期需要做大量的系統分析和設計的工作。

四、 跨平台性

Java和PHP都有很好的跨平台的特性。幾乎都可以在不作任何修改的情況下運行在Linux或者Windows等不同的操作系統上。

五、 開發成本比較

PHP最經典的組合就是:PHP + MySQL + Apache。非常適合開發中小型的Web應用,開發的速度比較快。而且所有的軟體都是開源免費的,可以減少投入。

Java的Web應用伺服器有免費Tomcat、JBoss等,如果需要更好的商業化的服務有:Web Sphere和 Web logic。

六、 分散式多層架構比較

PHP只能實現簡單的分散式兩層或三層的架構,而JAVA在這方面就比較強大,可以實現多層的網路架構。資料庫層(持久化層)、應用(業務)邏輯層、表示邏輯層彼此分開,而且現在不同的層都已經有一些成熟的開發框架的支持。例如Struts就是利用java的Web開發技術實現了MVC的設計模式,而在業務邏輯層也有Spring框架,資料庫持久化層有Hibernate等框架。這些框架可以方便開發者高效、合理、科學得架構多層的商業應用。

下面簡要的說一下Struts,它實質上是在JSP Model2的基礎上實現的一個MVC(Model、View、Controler)框架。JSP Model2體系結構是一種聯合使用JSP 與Servlet 來提供動態內容的方法。在Struts框架中,模型由實現業務邏輯的JavaBean或EJB組件構成,控制器由Servlet實現的,視圖由一組JSP文件組成。採用Struts可以明確角色的定義和開發者與網頁設計者的分工。而且項目越複雜,其優勢越明顯。

七、 源代碼安全

PHP開發的程序的源代碼都是公開的,他人拿到php開發的程序後都可以進行修改。

Java開發的程序,最後用戶拿到的是只是一些編譯好的class類,無法看到完整的源代碼,安全性高。

八、性能比較

有人做過試驗,對這兩種種語言分別做迴圈性能測試及存取Oracle資料庫測試。

在循環性能測試中,JSP只用了令人吃驚的四秒鐘就結束了20000*20000的迴圈。而PHP測試的是2000*2000循環(少一個數量級),卻分別用了63秒。

資料庫測試中,二者分別對 Oracle 8 進行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒。

綜上所述,我個人認為,PHP適合於快速開發,中小型應用系統,開發成本低,能夠對變動的需求作出快速的反應。而Java適合於開發大型的應用系統,應用的前景比較廣闊,系統易維護、可復用性較好。還有,同樣功能的系統用Java開發的系統要比PHP開發的系統的價格要高。

java怎麼實現php 的crypt

/****************************************************************************

 * JCrypt.java

 *

 * Java-based implementation of the unix crypt command

 *

 * Based upon C source code written by Eric Young, eay@psych.uq.oz.au

 *

 ****************************************************************************/

public class JCrypt

{

   private JCrypt() {}

   private static final int ITERATIONS = 16;

   private static final int con_salt[] =

   {

      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 

      0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 

      0x0A, 0x0B, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 

      0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 

      0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 

      0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 

      0x23, 0x24, 0x25, 0x20, 0x21, 0x22, 0x23, 0x24, 

      0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 

      0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 

      0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 

      0x3D, 0x3E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 

   };

   private static final int cov_2char[] =

   {

      0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 

      0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 

      0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 

      0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 

      0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 

      0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 

      0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 

      0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A

   };

   private static final int byteToUnsigned(byte b)

   {

      int value = (int)b;

      return(value = 0 ? value : value + 256);

   }

   private static int fourBytesToInt(byte b[], int offset)

   {

      int value;

      value  =  byteToUnsigned(b[offset++]);

      value |= (byteToUnsigned(b[offset++])   8);

      value |= (byteToUnsigned(b[offset++])  16);

      value |= (byteToUnsigned(b[offset++])  24);

      return(value);

   }

   private static final void intToFourBytes(int iValue, byte b[], int offset)

   {

      b[offset++] = (byte)((iValue)         0xff);

      b[offset++] = (byte)((iValue  8 )  0xff);

      b[offset++] = (byte)((iValue  16)  0xff);

      b[offset++] = (byte)((iValue  24)  0xff);

   }

   private static final void PERM_OP(int a, int b, int n, int m, int results[])

   {

      int t;

      t = ((a  n) ^ b)  m;

      a ^= t  n;

      b ^= t;

      results[0] = a;

      results[1] = b;

   }

   private static final int HPERM_OP(int a, int n, int m)

   {

      int t;

      t = ((a  (16 – n)) ^ a)  m;

      a = a ^ t ^ (t  (16 – n));

      return(a);

   }

   private static int [] des_set_key(byte key[])

   {

      int schedule[] = new int[ITERATIONS * 2];

      int c = fourBytesToInt(key, 0);

      int d = fourBytesToInt(key, 4);

      int results[] = new int[2];

      PERM_OP(d, c, 4, 0x0f0f0f0f, results);

      d = results[0]; c = results[1];

      c = HPERM_OP(c, -2, 0xcccc0000);

      d = HPERM_OP(d, -2, 0xcccc0000);

      PERM_OP(d, c, 1, 0x55555555, results);

      d = results[0]; c = results[1];

      PERM_OP(c, d, 8, 0x00ff00ff, results);

      c = results[0]; d = results[1];

      PERM_OP(d, c, 1, 0x55555555, results);

      d = results[0]; c = results[1];

      d = (((d  0x000000ff)   16) |  (d  0x0000ff00)     |

           ((d  0x00ff0000)  16) | ((c  0xf0000000)  4));

      c = 0x0fffffff;

      int s, t;

      int j = 0;

      for(int i = 0; i  ITERATIONS; i ++)

      {

         if(shifts2[i])

         {

            c = (c  2) | (c  26);

            d = (d  2) | (d  26);

         }

         else

         {

            c = (c  1) | (c  27);

            d = (d  1) | (d  27);

         }

         c = 0x0fffffff;

         d = 0x0fffffff;

         s = skb[0][ (c       )  0x3f                       ]|

             skb[1][((c   6)  0x03) | ((c   7)  0x3c)]|

             skb[2][((c  13)  0x0f) | ((c  14)  0x30)]|

             skb[3][((c  20)  0x01) | ((c  21)  0x06) |

                                          ((c  22)  0x38)];

         t = skb[4][ (d     )   0x3f                       ]|

             skb[5][((d  7)  0x03) | ((d   8)  0x3c)]|

             skb[6][ (d 15)  0x3f                       ]|

             skb[7][((d 21)  0x0f) | ((d  22)  0x30)];

         schedule[j++] = ((t   16) | (s  0x0000ffff))  0xffffffff;

         s             = ((s  16) | (t  0xffff0000));

         s             = (s  4) | (s  28);

         schedule[j++] = s  0xffffffff;

      }

      return(schedule);

   }

   private static final int D_ENCRYPT

   (

      int L, int R, int S, int E0, int E1, int s[]

   )

   {

      int t, u, v;

      v = R ^ (R  16);

      u = v  E0;

      v = v  E1;

      u = (u ^ (u  16)) ^ R ^ s[S];

      t = (v ^ (v  16)) ^ R ^ s[S + 1];

      t = (t  4) | (t  28);

      L ^= SPtrans[1][(t       )  0x3f] |

           SPtrans[3][(t   8)  0x3f] |

           SPtrans[5][(t  16)  0x3f] |

           SPtrans[7][(t  24)  0x3f] |

           SPtrans[0][(u       )  0x3f] |

           SPtrans[2][(u   8)  0x3f] |

           SPtrans[4][(u  16)  0x3f] |

           SPtrans[6][(u  24)  0x3f];

      return(L);

   }

   private static final int [] body(int schedule[], int Eswap0, int Eswap1)

   {

      int left = 0;

      int right = 0;

      int t     = 0;

      for(int j = 0; j  25; j ++)

      {

         for(int i = 0; i  ITERATIONS * 2; i += 4)

         {

            left  = D_ENCRYPT(left,  right, i,     Eswap0, Eswap1, schedule);

            right = D_ENCRYPT(right, left,  i + 2, Eswap0, Eswap1, schedule);

         }

         t     = left; 

         left  = right; 

         right = t;

      }

      t = right;

      right = (left  1) | (left  31);

      left  = (t     1) | (t     31);

      left  = 0xffffffff;

      right = 0xffffffff;

      int results[] = new int[2];

      PERM_OP(right, left, 1, 0x55555555, results); 

      right = results[0]; left = results[1];

      PERM_OP(left, right, 8, 0x00ff00ff, results); 

      left = results[0]; right = results[1];

      PERM_OP(right, left, 2, 0x33333333, results); 

      right = results[0]; left = results[1];

      PERM_OP(left, right, 16, 0x0000ffff, results);

      left = results[0]; right = results[1];

      PERM_OP(right, left, 4, 0x0f0f0f0f, results);

      right = results[0]; left = results[1];

      int out[] = new int[2];

      out[0] = left; out[1] = right;

      return(out);

   }

   public static final String crypt(String salt, String original)

   {

      while(salt.length()  2)

         salt += “A”;

      StringBuffer buffer = new StringBuffer(”             “);

      char charZero = salt.charAt(0);

      char charOne  = salt.charAt(1);

      buffer.setCharAt(0, charZero);

      buffer.setCharAt(1, charOne);

      int Eswap0 = con_salt[(int)charZero];

      int Eswap1 = con_salt[(int)charOne]  4;

 

      byte key[] = new byte[8];

      for(int i = 0; i  key.length; i ++)

         key[i] = (byte)0;

      for(int i = 0; i  key.length  i  original.length(); i ++)

      {

         int iChar = (int)original.charAt(i);

         key[i] = (byte)(iChar  1);

      }

      int schedule[] = des_set_key(key);

      int out[]      = body(schedule, Eswap0, Eswap1);

      byte b[] = new byte[9];

      intToFourBytes(out[0], b, 0);

      intToFourBytes(out[1], b, 4);

      b[8] = 0;

      for(int i = 2, y = 0, u = 0x80; i  13; i ++)

      {

         for(int j = 0, c = 0; j  6; j ++)

         {

            c = 1;

            if(((int)b[y]  u) != 0)

               c |= 1;

            u = 1;

            if(u == 0)

            {

               y++;

               u = 0x80;

            }

            buffer.setCharAt(i, (char)cov_2char[c]);

         }

      }

      return(buffer.toString());

   }

   public static void main(String args[])

   {

      if(args.length = 2)

      {

         System.out.println

         (

            “[” + args[0] + “] [” + args[1] + “] = [” +

            JCrypt.crypt(args[0], args[1]) + “]”

         );

      }

   }

}

java怎麼調用php的語句是什麼

PHP調用JAVA方式

1. 背景

在開發招商銀行信用卡分期付款功能過程中,在支付成功之後需要對銀行的返回數據進行簽名驗證,因簽名加密方式招商銀行是不提供的,只提供了相應的JAVA驗證類測試例子,而本項目採用的是PHP架構方式,因此需要PHP調用JAVA的驗證類來測試簽名是否正確。

2. 目的

本文檔提供一種PHP調用JAVA類的方式來進行招行的支付成功簽名驗證,本方法也可用於其他銀行的JAVA簽名驗證方式。

3. 名詞解釋

名詞

解釋說明

php-java-bridge

PHP和JAVA的連接橋

4. php-java-bridge安裝和配置介紹

4.1 安裝

Php-java-bridge下載路徑:

最新php-java-bridge版本是php-java-bridge_6.2.1.tar.gz解壓之後採用/usr/local/php/phpize進行模塊編譯,提示Cannot find config.m4,版本過高問題,採用了5.4.4.2版本。

編譯及安裝:

tar zxvf php-java-bridge_5.4.4.2.tar.gz

cd php-java-bridge-5.4.4.2/

/usr/local/php/bin/phpize

./configure –disable-servlet –with-java=/usr/local/java/,/usr/local/java/jre –with-php-config=/usr/local/php/bin/php-configmake make install

4.2 配置

vim /usr/local/php/etc/php.ini

[新增]

extension=java.so

[java]

java.java_home=”/usr/local/java/”

java.java=”/usr/local/java/jre/bin/java”

java.log_file=”/var/log/php-java-bridge.log”java.classpath=”/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/JavaBridge.jar”java.libpath=”/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/”java.log_level=”3″

java.hosts=”10.204.79.232:8081″

4.3 啟動

重新啟動nginx或者apache,輸入?php phpinfo();?可以看到java support

Enabled

java bridge

5.4.4.2

java.log_level

2

手動啟動javaBridge

java -jar JavaBridge.jar SERVLET:8080

也可以嘗試使用java -jar JavaBridge.jar SERVLET_LOCAL:80814.4 測試

解壓javaBridge.jar,取出java目錄下相關的Java.inc文件測試代碼:

require_once(“java/Java.inc”);

$string = new Java(“java.lang.String”, “HelloWorld”);echo $string;

$system=new Java(“java.lang.System”);

echo “Java version=”.$system-getProperty(“java.version”).” “;注意:java/Java.inc記得從javaBridge.jar解壓出來放在相關php代碼中注意取值:java_is_true java_is_false java_values5. 注意事項及配置過程中的問題

下述描述在實際配置測試過程中可能會碰到的問題及解決方法:

5.1 問題

問題1:

configure: error: host_alias is not set. Make sure to run config.guessBack-end configuration failed.

Please install the recommended autoconf, libtool and automake versionsor disable back-end configuration and use the pre-compiled J2EE back-end:

./configure –disable-backend –with-java=JAVA_HOME

configure: error: ./configure.gnu failed for server安裝yum install libtool即可

5.2 注意事項

事項1:

遠程調用require_once(『『);需要設置php.ini的allow_url_include參數為on,同時編輯 JavaBridge 部署的 Web 應用程序目錄中的 web.xml 文件,如下:

取消對這個部分的注釋,以便允許對您的 Java 類進行遠程訪問init-param

param-namepromiscuous/param-name

param-valueOn/param-value

/init-param

事項2:

在實際生產環境中,考慮到如果每台機器都部署一個JavaBridge服務的話,不好維護。故考慮在單台或2台左右機器上部署,其他機器連接到部署機器上,可以做分流承壓的功效並且易監控。在外網環境下發現在調用部署環境的內外網IP都無法獲取到指定文檔。實際require_once本質就是調用部署環境的java.inc文件,可以考慮把相關文件放在本地生產環境上,但在引用Java_require相關JAR包會提示連接不到JavaBridge服務,閱讀Java.inc可以查看它會通過幾個地方設置JAVA_HOST宏變數,第一種是通過require_once裡面的IP或者域名和埠,另外一種是在未設置JAVA_HOST宏變數的前提下讀取php.ini,如果都沒有java.hosts參數則默認為127.0.0.1:8080。

排除第一種方式如果採用讀取php.ini的話,因為本身java.hosts參數不屬於PHP可人為設置的參數,採用ini_set函數並不能指定java.hosts的值,所以一種方式是在所有項目的生產環境的php.ini都指定內網IP和埠,如java.hosts=10.204.79.231:8080。還有一種方式,查閱Java.inc可以看到是在未設置JAVA_HOST變數的前提下是去讀取php.ini,我們可以在require_once(『java/Java.inc『)之前新增一行define (“JAVA_HOSTS”, $host)。

5.3 參考例子

個人的實際測試代碼如下:

private function _checkSign($strText, $strSign){$ret = false;

try{

$host = ConfigWrapper::load()-services-phpjava-host;if($host != NULL){

define (“JAVA_HOSTS”, $host);

}

require_once(『java/Java.inc『);

java_require(self::CMBJAR);

$pay = new Java(『testCdpaySign『, self::CERFILE);$result = $pay-checkSign((string)$strText, (string)$strSign);if(java_is_true($result) == 1){

$ret = true;

}

}catch (\Exception $e) {

Logger::debug(“_checkSign = ” . $e-getMessage());}

return $ret;

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/206326.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 17:50
下一篇 2024-12-07 17:51

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論