Php 调用java类配置过程示例

内容摘要
这篇文章主要为大家详细介绍了Php 调用java类配置过程示例,具有一定的参考价值,可以用来参考一下。

对Php调用java类配置过程对此感兴趣的朋友,看看idc笔记做的技术笔记!Php是
文章正文

这篇文章主要为大家详细介绍了Php 调用java类配置过程示例,具有一定的参考价值,可以用来参考一下。

对Php调用java类配置过程对此感兴趣的朋友,看看idc笔记做的技术笔记!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.php3. 然后在浏览器里访问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-笔记网: 512PiC.com
 **/
<init-param>
<param-name>promiscuous</param-name>
<param-value>On</param-value>
</init-param>
/***   来自php教程(www.idcnote.com)   ***/
5. 和JavaBridge类似,php配置默认属性也是不允许远程文件的包含,要修改这个属性,就要编辑php.ini文件,将下面两个属性打开 allow_url_fopen = On allow_url_include = On(这个属性可能要添加)6. 在apache的目录/var/www/html/下面写一个测试php页面,内容如下:

/**
 * Php调用java类配置过程
 *
 * @param 
 * @arrange 512-笔记网: 512PiC.com
 **/
<?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;
 ?>
/***   来自php教程(www.idcnote.com)   ***/
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.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.,sun.beans.,
8. 下面自己写一个类,实现调用。内容如下:

/**
 * Php调用java类配置过程
 *
 * @param 
 * @arrange 512-笔记网: 512PiC.com
 **/
 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());
 }
 }
/***   来自php教程(www.idcnote.com)   ***/
然后在和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-笔记网: 512PiC.com
 **/
 <?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;
 ?>
/***   来自php教程(www.idcnote.com)   ***/
刷新http://localhost/test.php 你会看到比刚才看到的java环境内容多一行的Hello world内容。后记:test.php文件的require_once的参数,如果是本机访问tomcat,可以写绝对路径,不用http形式的,如果是这一行出现错误,不妨写成绝对路径试试看,如果出现错误,一般是php.ini或者你的web.xml文件的两处修改没有做。还有就是如果没有看到想要的内容或者有什么错误,记得先重启一下apache或者tomcat试试看,柳暗花明,呵呵。 对照我的记录,你会hello world的!

注:关于Php 调用java类配置过程示例的内容就先介绍到这里,更多相关文章的可以留意

代码注释

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!