安装和配置PHP/Java桥
最新的PHP/Java桥zip包可在sourceforge .net/ projects/ php-java-bridge/下载到,安装过程依赖于选择哪个Java平台通过这座桥与PHP脚本交互。
◆对于J2SE,安装非常简单:
◆安装J2SE 1.6或更高版本
◆安装PHP 5.1.4或更高版本
◆解压php-java-bridge_5.2.2_j2ee.zip包
在Java类中使用PHP脚本
为了在Java应用程序中调用PHP方法,你必须对Java API非常熟悉,这个API最重要的类是:
javax.script.ScriptEngineManager:这个类扩展了java.lang.Object类,并且为ScriptEngine类提供了实例化机制。
javax.script.ScriptEngine:这是一个Java接口,包括了每个Java ScriptEngine中期望的完整功能的函数,它是通过如AbstractScriptEngine, InteractivePhpScriptEngine, InvocablePhpScriptEngine, , PhpScriptEngine,和 PhpServletScriptEngine这些类实现的。
javax.script.Invocable:这个接口提供了一个函数允许java应用程序在脚本编译器下调用中间层代码。
提醒:在/documentation/server/documentation/API目录下有更多的类及其详细信息。
2. Java 写的应用程序如何调用PHP写的应用程序接口怎么调用
PHP是编程语言和应用程序服务器的结合。PHP和其它的编程语言类似,使用变量存储临时数值,使用操作符处理变量。PHP的真正价值在于它是一个应用程序服务器。
当谈到应用程序服务器的时候,我是指一个把几个不同的技术组合为一个完整的套件的程序。这些技术包括:
* 一个强壮的编程语言。
* 存取数据库中存储的数据。
* 支持 Internet协议,尤其是电子邮件和HTTP协议。
注意:应用程序服务器有许多其它的特性,这里只列出了最基本的特性。
由于提供了这些多种不同技术的前端接口,PHP可以使工作变的很容易。
本章的其它部分讲述了有关PHP的许多繁杂资料,以及它在应用软件开发中起到的作用。
1.1 起源
PHP是由Rasums Lerdorf创建的,它开始是一个简单的用Perl语言编写的程序,用来记录Rasums Lerdorf自己在线简历的访问者。以后它又被用C语言重新写过,范围扩大到访问数据库。在这期间,有许多人向Rasums Lerdorf要此程序的拷贝,以便自己使用。Rasums Lerdorf为此写了一些介绍此程序的文档,并发布PHP v1.0。以后,越来越多的人开始使用PHP,并强烈要求增加一些其他的特性,如循环语句和数组变量等。到这时,其他的一些程序员也开始参与PHP源码的编写(主要有Zeev Suraki和Andi Gutmans),很明显,此时的PHP为了以后的发展,必须重新编写。因此,PHP v3.0就出现了。
1.2 特性
PHP的特性包括:
* 开放源码 -- 所有的PHP源码都可以得到。事实上,所有的源码都包含在随书附带的光盘中。
* 没有运行费用 -- PHP是免费的。
* 基于服务器端 -- 由于PHP是在Web服务器端运行的,PHP程序可以很大、很复杂而不会降低客户端的运行速度。
* 跨平台 -- 虽然本书是以Linux为重点介绍的,但PHP程序可以运行在UNIX,Linux,或者Windows操作系统下。
* 嵌入HTML -- 因为PHP语言可以嵌入到HTML内部,所以PHP很容易学习。
* 简单的语言 -- 和Java和C++不同,PHP语言坚持以基本语言为基础,然而它的功能也强大到足以支持任何类型的Web站点。
* 效率高 -- 和其它的解释性语言相比,PHP系统消耗较少的系统资源。当PHP作为Apache Web服务器的一部分时,运行代码不需要调外部二进制程序,服务器解释脚本不需要承担任何额外负担。
* 分析XML -- 用户可以组建一个可以读取XML信息的PHP版本。
* 数据库模块 -- 用户可以使用PHP存取Oracle、Sybase、MS SQL、Adabase D、MySQL、mSQL、PostgreSQL、dBase、FilePro、Unix dbm、Informix/Illustra等类型的数据库,以及任何支持ODBC标准的数据库。
* 文件存取--PHP有许多支持文件存取函数。
* 文本处理--PHP有许多函数处理字符串,其中包括模式匹配的能力。
* 复杂的变量--PHP支持标量、数组、关联数组等变量,这给用户提供了以支持其它的高级数据结构的坚实基础。
* 图象处理--用户可以使用PHP动态的创建图象。
* 更多的其它功能!
1.3 PHP需要花费多少钱?
PHP是免费的。所有的源码、文档都可以免费的复制、编译、打印和分发。用户的任何一个用PHP编写的程序都属于用户自己,可以按照自己的意愿进行处理,而不需要付任何版税。就PHP本身而言,用户可以无限制地发布自己编写的程序。
然而,有着很充分的理由,PHP并不是彻底的“公共领域”代码。如果PHP源码是完全的公共领域代码,很可能就有人对PHP的源码做很小的修改,然后编译并出售--换一句话说,从它的创作者中脱离出来。但从另一方面说,如果不公布源码,很难使想使用它的用户感到放心。
GNU通用公共许可是一种发布免费软件的方法,它可以避免其他人占有你的劳动成果。在符合GNU许可的条件下,源码可以自由地发布,并且任何一个人都可以使用,但是任何来源于此代码的程序必须以同样种类的许可方式发布。换句话说,如果用户从任何GNU许可下的源码中得到代码而编写自己的程序,用户必须给任何想得到源码的人共布自己的源码。
1.4 PHP语言可以嵌入HTML中
当使用者使用经典程序设计语言(如C或Pascal)编程时,所有的代码必须编译成一个可执行的文件,然后该可执行文件在运行时,为远程的Web浏览器而产生可显示的HTML标记。但另一方面,PHP并不需要编译(至少不编译成可执行文件)。使用者可以把自己的代码混合到HTML中。例如,下面的代码将显示“Hello,world!”,PHP代码在下面以黑体字显示。
<HTML>
<HEAD><TITLE>Test</TITLE></HEAD>
<BODY>
<?PHP $string = 'world!'; ?>
<H1>Hello,<?php echo $string ?></H1>
</BODY>
</HTML>
PHP应用程序服务器(本书的主要写作目的)是紧密集成到Apache Web服务器中的,可以在一个程序内同时调用它们两个。当Web浏览器请求PHP Web页面的时候,Web服务器的PHP部分将被调用进行解释。Web服务器在请求的Web页中寻找<?PHP . . . ?>标记,并按要求执行这些PHP代码。
由PHP代码生成的输出将替代<?PHP . . . ?>标记。例如,当PHP代码运行后,以前的Web页面将变成如下所示的内容:
<HTML>
<HEAD><TITLE>Test</TITLE></HEAD>
<BODY>
<H1>Hello,world!</H1>
</BODY>
</HTML>
注意,所有的PHP代码都消失了,仅仅留下了HTML语句。而由PHP代码生成的HTML语句在上例中以黑体的形式显示。
1.5 PHP语言是在Web服务器端运行
当开发互联网应用程序时,很重要的一点是要清楚应用程序是在哪一端运行的。PHP总是运行在服务器端。不要嘲笑对这一点的强调。在以后考虑对应用程序某些特性进行规划时,有的人可能就会在应用程序在哪里运行的这个问题上搞错,不要让自己也成为这些人中的一个。
由于Java applets,ActiveX,或javascript 都是运行在客户端的Web浏览器中的,因此PHP不能直接和它们进行比较。然而可以很容易的将这些语言与PHP相结合在一起,使用PHP可以很方便地生成所需要的任何HTML代码,当然也就能激活Java applets和ActiveX控件,还可以动态生成javascript语句。当对互联网应用程序开发还很陌生的时候,这也许没有什么意义,但是在读完这本书后,这一切就会变得十分清晰的了。
1.6 PHP无处不在
无处不在是常使用的充满激情的词语,到1999年7月,将有60万左右的Web站点使用PHP,1999年夏天有关Linux和开放代码运动的大发展很可能使PHP团体有突破性发展。可以在站点上看到它的发展趋势图表。
此外,PHP邮件列表每天能收到大约80个电子邮件,每个月能收到大约2500个电子邮件,这说明PHP是一个非常活跃的开发团体。使用PHP的商业公司有以下几个,Mitsubishi Motors、Volvo、Red Hat Software、E*Trade、First USA Bank、the San Francisco Giants和San Diego Zoo等等。
1.7 PHP和C或Java相似吗?
PHP程序和C程序有略微相似的地方,这是由于PHP来源于C、Perl和Java。一些对C语言来讲比较麻烦的方面(如处理字符串的技术),由于采用了和Perl相近的技术,在PHP中就不再是麻烦了。PHP中也不包括Java中的一些面向对象特性。
PHP能很好地处理某些低级的任务,如果代码需要运行的特别快,可以很方便的使用C为PHP程序编写模块。
1.8 PHP比ColdFusion、Active Server Page或Java Server Page更好吗?
以流行的商议方式,我总是回答,“可以是,也可以不是”。
回答是,是由于它的费用(免费)以及可以通过邮件列表、IRC而在世界范围内有广泛的支持网络。同时PHP还在不断地发展着,如果想要一个PHP现在没有的特性时,请等待几个月,就有人很快为PHP编程而加上此种特性。
回答不是,是由于商业软件有比PHP更多的特性。例如,Allaire's ColdFusion有一个已证实可靠的搜索引擎组件。微软的Active Server Page技术提供了与Outlook、电子邮件和工作组程序相结合的能力。Java Server Page让使用者可以使用互联网上的大量开放源码模块。
1.9 总结
对于遍及互联网上的PHP,本章仅仅简要提到了它的一些特性,本章也介绍了当设计互联网应用程序时,PHP为什么是最好的编程工具之一的原因。
3. 如何在java程序中调用php文件
publicStringexecPHP(StringscriptName,Stringparam){
StringBuilderoutput=newStringBuilder();
BufferedReaderinput=null;
StringphpPath="D:/xampp/php/php.exe";
try{
Stringline;
Processp=Runtime.getRuntime().exec(phpPath+""+scriptName+""+param);
input=newBufferedReader(newInputStreamReader(p.getInputStream()));
while((line=input.readLine())!=null){
output.append(line);
//p.destroy();//根据系统不同可能需要
}
p.destroy();
}catch(Exceptionerr){
err.printStackTrace();
}finally{
if(input!=null){
try{
input.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
returnoutput.toString();
}
//调用php算法
conclusion=runPHP.execPHP(ALGORITHM_RESIDUES_URL,imageResiesId);
//php接收
$id=$argv[1];
因为此方法是java开进程直接调用php,因此是以内存方式传参
4. java 怎么调用php的api接口
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import XmlHelper;
public class QXOutStream {
public String outPutStr(String urlStr, String input) throws Exception{
StringBuffer strBuf = new StringBuffer();
String Resulst="";
try{
URL url = new URL(urlStr);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setAllowUserInteraction(false);
con.setUseCaches(false);
con.setRequestProperty("Accept-Charset", "GBK");
BufferedOutputStream bufOutPut = new BufferedOutputStream(con.getOutputStream());
byte[] bdat = input.getBytes("UTF-8");//解决中文乱码问题
bufOutPut.write(bdat, 0, bdat.length);
bufOutPut.flush();
BufferedInputStream inp = new BufferedInputStream(con.getInputStream());
InputStreamReader in = new InputStreamReader(inp,Charset.forName("GBK"));
BufferedReader bufReador = new BufferedReader(in);
String tempStr = "";
while (tempStr != null) {
strBuf.append(tempStr);
tempStr = bufReador.readLine();
}
Resulst = XmlHelper.getPostNodeText(strBuf.toString(), "OPERATOR_RESULT");//.getPostFirstRowText(strBuf.toString(), "OPERATOR_RESULT");
}
catch (Exception e) {
//System.err.println("Exception:"+e.toString());
throw e;
//return "N";
}
finally{
return Resulst;
}
}
}
你可以参考这个例子调用php 的api接口,这里面的urlStr就是你调用php的api url接口
5. php 和java的执行的区别
1、系统的技术架构比较
分层是将系统进行有效组织的方式,分而治之的思想是计算机领域中非常重要的思想。在好的分层思想引导下,便能实现“高内聚、低耦合”,也能将具体的问题割裂开来,易于控制、易于延展,更易于分配资源。PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就十分强大,可以实现多层的网络架构。运用MVC的设计模式,可使oa系统具有更加高效、合理的系统架构。技术架构的落后,使运用php编写的oa软件系统先天不足,而后天又无法补足其先天上的劣势。使得系统在可拓展性、需求应变性上与JAVA编写的oa软件系统的差距越来越大。架构的差距,注定了php做的oa充其量是个小家碧玉,始终无法和java这种大家闺秀同台竞技。
2、数据库访问比较
PHP可编译成具有与许多数据库相连接的函数。将自己编写外围的函数去间接存取数据库。通过这样的途径当更换使用的数据库时,可以轻松地修改编码以适应这样的变化。但PHP提供的数据库接口支持彼此不统一,比如对Oracle, MySQL,Sybase的接口,彼此都不一样。由于PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。
而Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库,访问数据库的接口比较统一。如果同样是将开发的web应用从MYSQL数据数转到ORACLE数据,PHP需要做大量的修改工作,而且比较繁琐。但JAVA开发的便只需要很少的更改便能实现。
数据库访问方式的差异,奠定了php开发出的oa和java开发出来的oa是马车和火车的差距,前者只能亦步亦趋而且额度有限,后者却是工业化的结晶,不仅能够包容万物而且速度上稳步提升。
3、安全性对比
在同是开源和跨平台的java面前,php丢掉了很多的优势。在代码的安全性上尤为突出。php的开发程序在别人拿到代码后,可以很容易的进行修改。而java开发的程序由于无法看到完整的源代码,只能看到一些编译好的类文件,所以安全性较高。加之系统架构的优势,在安全性上php和java是相去甚远。
如果非要将php和java在安全性上做个比较的话,同一个小偷光顾php那是随便拿来随便改,想拿什么拿什么,拿的高兴还能大笔一辉某某到此一游。而光顾java的时候,便会发现警察把守,内设自动报警装置,即便突破重重阻扰后进入居室。那值钱的东西都放在加密后的保险柜中,只能望洋兴叹、铩羽而归。