Php 调用java类配置过程示例

PHP调用java类配置过程感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!
PHP是在apache下面解析的,而java类是在tomcat下面解析的,我之前的web服务都是部署在了tomcat下面,因为目前要转移web服务,使用PHPrpc修改为三层架构,所以尝试一下使用PHP调用java。 以下的配置都是基于PHP-java-bridge,下面的介绍出自ibm官网http://www.ibm.com/developerworks/cn/aix/library/au-javaPHPaix5。

PHP Java Bridge 是一种经过优化的、基于 XML 的协议,它允许您在 PHP 应用程序中直接使用 Java 类。

尽管从理论上讲,它的工作方式类似于 SOAP,但是实际上,它比 SOAP 方法的效率要高得多。 该系统使用 JSR 223 接口进行工作。PHP 组件可以与任何 ECMA-335 后端系统通信,其中包括 Java 技术、基于 Java 的扩展接口(如 JPython 和 JRuby),部署公共语言运行时(Common Language Runtime,CLR)的 .NET 应用程序、甚至还包括 .NET 兼容的解决方案(如 Mono)。 这个过程是双向的:PHP 脚本可以调用 Java/.NET 类,或者 Java 组件可以调用 PHP 类或脚本。甚至可以将这种桥接集成到解决方案中,以便在请求一个类的时候,允许自动地启动后端系统(Apache/IIS 和 PHP、或者 .NET、或者 Java/Tomcat)。

该系统通过访问 Tomcat 应用服务器上的一个远程类进行工作。当您运行 PHP 应用程序时,它从远程 Java 应用程序服务平台加载 PHP Java Bridge 代码。这将初始化系统,并使得 PHP 脚本知道如何与该应用服务器上的远程 Java 类进行通信。 很显然,为了能够使用 PHP Java Bridge 访问您的 Java 类,您必须在安装 PHP Java Bridge 之前,安装 Apache 和 PHP

下面是配置过程:
1. 首先要保证你的系统已经装上了apache和PHP,以及tomcat、jdk,这些文件的安装网络上比较全,在此不多赘述。
2. 将下载的javabridge.war文件直接拷贝到tomcat的webapps目录下面,然后重启tomcat,之后你会发现在tomcat的webapps目录下面多了一个JavaBridge目录,其java目录下包含了我们要调用的Java.inc文件
Javabridge官网:http://PHP-java-bridge.sourceforge.net/pjb/index.PHP
3. 然后在浏览器里访问http://localhost:8080/JavaBridge,看到如下所示,证明你的tomcat正确解析了这个包。 PHP/java bridge examples …………
4. 但是在认的情况下,PHP Java Bridge 配置为不允许来自非本地服务器的连接。这意味着,如果您希望将您的应用程序部署到不同的服务器,那么可能会阻止您的连接。要更改这项配置,您需要更改 JavaBridge 应用程序所使用的参数。要实现这一点,可以编辑 JavaBridge 部署的 Web 应用程序目录中的 web.xml 文件。它应该是 Tomcat 安装目录中的 webapps/JavaBridge/WEB-INF/web.xml 文件。 您需要取消对这个部分的注释,以便允许对您的 Java 类进行远程访问

/**
 * PHP调用java类配置过程
 *
 * @param 
 * @arrange 512-笔记网: www.jb51.cc
 **/
<init-param>
<param-name>promiscuous</param-name>
<param-value>On</param-value>
</init-param>
/***   来自编程之家 jb51.cc(jb51.cc)   ***/
5. 和JavaBridge类似,PHP配置属性也是不允许远程文件的包含,要修改这个属性,就要编辑PHP.ini文件,将下面两个属性打开 allow_url_fopen = On allow_url_include = On(这个属性可能要添加

6. 在apache的目录/var/www/html/下面写一个测试PHP页面内容如下:

/**
 * PHP调用java类配置过程
 *
 * @param 
 * @arrange 512-笔记网: www.jb51.cc
 **/
<?PHP
 //require_once(/usr/local/tomcat/webapps/JavaBridge/java/Java.inc);
require_once(http://localhost:8080/JavaBridge/java/Java.inc);
$System = new Java(java.lang.System);
 $te = $System->getProperties();
 echo $te;
 ?>
/***   来自编程之家 jb51.cc(jb51.cc)   ***/
7. 在浏览器中访问http://localhost/test.PHP,如果能看到如下内容,则你的 apache 可以访问到本机的java类了。
{java.runtime.name=Java(TM) SE Runtime Environment,sun.boot.library.path=/usr/java/jdk1.6.0_17/jre/lib/i386,java.vm.version=14.3-b01,shared.loader=,java.vm.vendor=Sun Microsystems Inc.,java.vendor.url=http://java.sun.com/,path.separator=:,tomcat.util.buf.StringCache.byte.enabled=true,java.util.logging.config.file=/usr/local/tomcat/conf/logging.properties,java.vm.name=Java HotSpot(TM) Client VM,file.encoding.pkg=sun.io,sun.java.launcher=SUN_STANDARD,user.country=CN,sun.os.patch.level=unkNown,java.vm.specification.name=Java Virtual Machine Specification,user.dir=/usr/local/tomcat/bin,java.runtime.version=1.6.0_17-b04,java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment,java.endorsed.dirs=/usr/local/tomcat/endorsed,os.arch=i386,java.io.tmpdir=/usr/local/tomcat/temp,line.separator=,java.vm.specification.vendor=Sun Microsystems Inc.,java.naming.factory.url.pkgs=org.apache.naming,java.util.logging.manager=org.apache.juli.ClassLoaderLogManager,os.name=Linux,sun.jnu.encoding=UTF-8,java.library.path=/usr/java/jdk1.6.0_17/jre/lib/i386/client:/usr/java/jdk1.6.0_17/jre/lib/i386:/usr/java/jdk1.6.0_17/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib,java.specification.name=Java Platform API Specification,java.class.version=50.0,sun.management.compiler=HotSpot Client Compiler,os.version=2.6.11-1.1369_FC4,user.home=/root,catalina.useNaming=true,user.timezone=Asia/Shanghai,java.awt.printerjob=sun.print.PSPrinterJob,file.encoding=UTF-8,java.specification.version=1.6,catalina.home=/usr/local/tomcat,java.class.path=/usr/local/tomcat/bin/bootstrap.jar,user.name=root,java.naming.factory.initial=org.apache.naming.java.javaURLContextFactory,package.deFinition=sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.,java.vm.specification.version=1.0,java.home=/usr/java/jdk1.6.0_17/jre,sun.arch.data.model=32,user.language=zh,java.specification.vendor=Sun Microsystems Inc.,java.vm.info=mixed mode,sharing,java.version=1.6.0_17,java.ext.dirs=/usr/java/jdk1.6.0_17/jre/lib/ext:/usr/java/packages/lib/ext,sun.boot.class.path=/usr/java/jdk1.6.0_17/jre/lib/resources.jar:/usr/java/jdk1.6.0_17/jre/lib/rt.jar:/usr/java/jdk1.6.0_17/jre/lib/sunrsasign.jar:/usr/java/jdk1.6.0_17/jre/lib/jsse.jar:/usr/java/jdk1.6.0_17/jre/lib/jce.jar:/usr/java/jdk1.6.0_17/jre/lib/charsets.jar:/usr/java/jdk1.6.0_17/jre/classes,server.loader=,java.vendor=Sun Microsystems Inc.,catalina.base=/usr/local/tomcat,file.separator=/,java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi,common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,sun.io.unicode.encoding=UnicodeLittle,sun.cpu.endian=little,package.access=sun.,sun.beans.,

8. 下面自己写一个类,实现调用内容如下:

/**
 * PHP调用java类配置过程
 *
 * @param 
 * @arrange 512-笔记网: www.jb51.cc
 **/
 package test;
 public class Test{
 private String t1=Hello World!;
 public String get(){
return this.t1;
 }
 public static void main(String args[]){
 Test t = new test();
 System.out.println(t.get());
 }
 }
/***   来自编程之家 jb51.cc(jb51.cc)   ***/
然后在和test目录同级的目录下写一个MANIFEST.MF文件内容如下: Main-Class:(空格)test.Test(回车) MANIFEST.MF文件具有严格的结构,一定要按照这个格式写,如果包含了第三方包,一定要在第二行注明! 目录结构如下: Xxxx MANIFEST.MF test Test.java 然后在test目录同级执行jar cvfm test.jar MANIFEST.MF test/ 生成一个jar文件test.jar,用命令java –jar test.jar执行以下看是否可行。

9. 修改test.PHP内容如下

/**
 * PHP调用java类配置过程
 *
 * @param 
 * @arrange 512-笔记网: www.jb51.cc
 **/
 <?PHP
 //require_once(/usr/local/tomcat/webapps/JavaBridge/java/Java.inc);
 require_once(http://localhost:8080/JavaBridge/java/Java.inc);
 $System = new Java(java.lang.System);
 $te = $System->getProperties();
 echo $te;
 java_require(/root/);//一定要把刚才生成的jar文件放到这个require的目录下面
 $objectKey = new java(test.Test);
$tes =$objectKey->get();
 echo $tes;
 ?>
/***   来自编程之家 jb51.cc(jb51.cc)   ***/
刷新http://localhost/test.PHP 你会看到比刚才看到的java环境内容多一行的Hello world内容

后记:test.PHP文件的require_once的参数,如果是本机访问tomcat,可以写绝对路径,不用http形式的,如果是这一行出现错误,不妨写成绝对路径试试看,如果出现错误,一般是PHP.ini或者你的web.xml文件的两处修改没有做。还有就是如果没有看到想要的内容或者有什么错误,记得先重启一下apache或者tomcat试试看,柳暗花明,呵呵。 对照我的记录,你会hello world的!

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...