phpjava服务器(Java PHP)
- 服务器
- 2022-12-19 00:03:35
- 15
今天给各位分享phpjava服务器的知识,其中也会对Java PHP进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、可不可以用php编写服务器,用java编写客户端?
- 2、php做客户端,java做服务端,用webservice怎么交互
- 3、如何在Centos上搭建PHP+JAVA的服务器
- 4、PHP跟Java有什么区别?
可不可以用php编写服务器,用java编写客户端?
可以的,这两种需要都既可以客户端又可以服务端,但是建议Java作为服务端,PHP做客户端
php做客户端,java做服务端,用webservice怎么交互
.java编写webservice服务端,php作为客户端调用.
1.首先我们写一个简单的java类并发布webservice.
package com.php;
import java.util.Map;
/**
* @author yangjuqi
* @createdate 2009-5-18 下午04:43:09
*
*/
public class WebServiceImpl {
public String sendTransact(Map map) throws Exception {
System.out.println("::: Call testModel1 :::");
if(map!=null){
String bugmanifestid = StringUtil.getValue(map.get("bugmanifestid"));
String editedby = StringUtil.getValue(map.get("editedby"));
String dditeddate = StringUtil.getValue(map.get("dditeddate"));
String fullinfo = StringUtil.getValue(map.get("fullinfo"));
String action = StringUtil.getValue(map.get("action"));
System.out.println("bugmanifestid -$amp;quot;$ +bugmanifestid);
System.out.println("editedby -$amp;quot;$ +editedby);
System.out.println("dditeddate -$amp;quot;$ +dditeddate);
System.out.println("fullinfo -$amp;quot;$ +fullinfo);
System.out.println("action -$amp;quot;$ +action);
}
return "success";
}
}
2.配置server-config.wsdd
deployment xmlns=""
xmlns:java=""
handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper" /
handler name="auth"
type="java:com.php.AuthenticationHandler" /
handler name="URLLogging"
type="java:com.php.LogHandler"
parameter name="filename" value="c:\\MyService.log" /
/handler
service name="IWebService" provider="java:RPC"
parameter name="className"
value="com.php.WebServiceImpl" /
parameter name="allowedMethods" value="*" /
namespace;/namespace
/service
transport name="http"
requestFlow
handler type="URLMapper" /
handler type="URLLogging" /
/requestFlow
/transport
/deployment
3.发布到jboss后,访问 wsdl能看到xml文件就说明webservice发布好了。
4.写testphpweb.php文件
php
/*
* @author juqi yang $amp;amp;$gt;
* @create date 2009-05-18
*/
header("Content-Type: text/html; charset=GB2312");
echo " ::: PHP CALL JAVA-WEBSERVICE ::: br$amp;quot;$;
require_once("nusoap/lib/nusoap.php");
// 要访问的webservice路径
$NusoapWSDL=" wsdl";
// 生成客户端对象
$client = new soapclient($NusoapWSDL, true);
// 设置参数(注意:PHP只能以'数组集'方式传递参数,如果服务端是java,用Map接收)
$param = array( 'bugmanifestid' = 'E090500001',
'editedby' = '张三',
'dditeddate' = '2009-05-19',
'fullinfo' = '已联系刘德华,筹备今晚吃饭的事,等待回复',
'action' = '0');
echo "begin remote 。。。br$amp;quot;$;
// 调用远程方法
$result = $client-call('sendTransact', array($param));
echo "end remote 。。。br$amp;quot;$;
// 显示执行结果
if (!$err=$client-getError()){
echo '结果 : '.$result;
}else{
echo '错误 : '.$err;
}
5.启动apache,访问
php页面显示:
::: PHP CALL JAVA-WEBSERVICE :::
begin remote 。。。
end remote 。。。
结果 : success
jboss后台监视结果:
17:12:20,781 INFO [STDOUT] ::: Call testModel1 :::
17:12:20,781 INFO [STDOUT] bugmanifestid -E090500001
17:12:20,781 INFO [STDOUT] editedby -张三
17:12:20,781 INFO [STDOUT] dditeddate -2009-05-19
17:12:20,781 INFO [STDOUT] fullinfo -已联系刘德华,筹备今晚吃饭的事,等待回复
17:12:20,796 INFO [STDOUT] action -0
到此,php作为客户端调用java写的webservice服务端完成.
二,php编写webservice服务端,java作为客户端调用.
1.编写php webservice
php
/*
* @author juqi yang $amp;amp;$gt;
* @create date 2009-05-18
*/
header("Content-Type: text/html; charset=GB2312");
require_once("nusoap/lib/nusoap.php");
function sendManifest($param)
{
//把接收到的数据显示出来
return "hello ".$param["projectid"]."=$amp;quot;$.$param["projectname"]."=$amp;quot;$.$param["moduleid"];
}
$server = new nusoap_server();
//配置WSDL namespace
$server-configureWSDL('myservice', //服务名称
'', //tns指定的namespace,一般填写自己的URI
true, //endpoint url or false
'rpc', //服务样式
'', //传输协议,一直是这个。
'' //wsdl 'types'元素targetNamespace
);
// 注册web服务
$server-register('sendManifest', // 服务
array(
'projectid' = 'xsd:string',
'projectname' = 'xsd:string',
'moduleid' = 'xsd:string',
'modulepath' = 'xsd:string',
'bugtitle' = 'xsd:string',
'bugtype' = 'xsd:string',
'openedby' = 'xsd:string',
'openeddate' = 'xsd:string',
'assignedto' = 'xsd:string',
'assigneddate' = 'xsd:string',
'fixedtime' = 'xsd:string',
'fullinfo' = 'xsd:string',
'bugmanifestid' = 'xsd:string'), // 输入参数;数组,指定类型
array('resultCode' = 'xsd:string'), // 输出;数组,指定类型
'', // namespace of method
'', // soapaction
'rpc', // style
'encoded', // use
'serviceConsumeNotify' // documentation
);
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) $HTTP_RAW_POST_DATA : '';
$server-service($HTTP_RAW_POST_DATA);
2.启动apache后,访问 ,如果页面如下图所示,表示webservice发布好了。
3.编写java客户端CallPhpServer .java 并调用php webservice
package com.php;
import java.util.HashMap;
import java.util.Map;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
/**
* @author yangjuqi
* @createdate 2009-5-18 下午05:31:06
*
*/
public class CallPhpServer {
/**
* 测试方法
* @return
* @throws Exception
*/
public static String callManifest() throws Exception {
System.out.println("0");
Service service = new Service();
Call call = (Call) service.createCall();
System.out.println("1");
call.setTargetEndpointAddress(new java.net.URL(""));
call.setOperationName("sendManifest");
System.out.println("2");
Map map=new HashMap();
map.put("projectid", "109");
map.put("projectname", new String("新MM国际物流平台".getBytes(),"iso-8859-1"));
map.put("moduleid", "11");
map.put("modulepath", new String("财务管理".getBytes(),"iso-8859-1"));
map.put("bugtitle", new String("关于总账报表数据的问题".getBytes(),"iso-8859-1"));
map.put("bugtype", "TrackThings");
map.put("openedby", "zhangsan");
map.put("openeddate", "2009-05-31");
map.put("assignedto", "liumang");
map.put("assigneddate", "2009-05-31");
map.put("fixedtime", "2009-06-03");
map.put("fullinfo", new String("现在总账报表页面下的合计数据不对,烦请抓紧事件核实确认更正,谢谢!".getBytes(),"iso-8859-1"));
map.put("bugmanifestid", "E090500001");
call.addParameter("param", org.apache.axis.Constants.SOAP_ARRAY,javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
System.out.println("3");
Object obj=call.invoke(new Object[]{map});
return obj.toString();
}
public static void main(String[] args) throws Exception {
System.out.println("::: call php webservice :::");
String str = callManifest();
String result=new String(str.getBytes("iso-8859-1"),"GBK");
System.out.println(result);
}
}
控制台显示结果:
::: call php webservice :::
log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
1
2
3
hello 109=新MM国际物流平台=11
到此,java作为客户端调用php的webservice服务端完成.
如何在Centos上搭建PHP+JAVA的服务器
一、需要解决中央控制端到各节点服务器之间的通信。
这个其实牵扯到一个通信协议的问题,各语言都有自己的socket,thread的库,直接调用即可。但是这个通信协议就需要自己来完成了。既不能太简单,太简单了,明码传输,如果别人获知了这个接口,就很容易执行一些令人讨厌的操作。也不能太复杂,太复杂了等于是给自己找麻烦,所以简单的数据包编解码的工作或者用token验证的方式是需要的。通信协议起码要两种,一种是传输命令执行的协议,一种是传输文件的协议。
二、跨语言的socket通信
为什么要跨语言,主控端和代理端通信,用什么语言开发其实无所谓。但是为了给自己省事,尽可能使用服务器上已经有了的默认语言,Ambari前期采用php+puppet的方式管理集群,这不是不可以,puppet自己解决了socket通信协议和文件传输的问题,可你需要为了puppet在每台服务器上都安装ruby。我是个有点服务器和代码洁癖的人。光是为了一个puppet就装个ruby,我觉得心里特对不起服务器的资源。所以我自己写了一个python的代理端。python是不管哪个linux系统在安装的时候就都会有了。然后主控端的通信,可以用python实现,也可以用php实现,但是考虑到对于更多的使用者来说,改php可能要比改tornado简单许多,所以就没用python开发。hadoop分支版本众多,发布出去,用户要自己修改成安装适合自己的hadoop发行版,就势必要改源码,会php的明显比会python的多。php里面的model封装了所有的操作,而python只是个操作代理人的角色而已。
所以也延伸出一个问题,什么语言用来做这种分布式管理系统的代理端比较合适,我自己觉得,也就是python比较合适了,操作系统自带,原生的package功能基本够用。用java和php也可以写agent,但是你势必在各节点预先就铺设好jre或者php运行环境。这就跟为什么用python和java写mapred的人最多是一样的。没人拦着你用nodejs写mapred,也可以写,就是你得在每个节点都装v8的解释引擎,不嫌麻烦完全可以这样干。原理参看map/reduce论文,不解释。perl也是操作系统原生带的,但是perl的可维护性太差了,还是算了吧。
所以这就牵扯到一个跨语言的socket问题,理论上来说,这不存在什么问题。但这是理论上的,实际开发过程中确实存在问题,比如socket长连接,通信数据包在底层的封装方式不同。我没有使用xml-rpc的原因之一就是我听说php的xmlrpc跟其他语言的xmlrpc有不同的地方,需要修改才能用,我就没有用这种办法。最早是自己定义的操作协议,这时就遇到了这些问题,所以后来直接采用了thrift方式。就基本不存在跨语言的socket通信问题了。
三、代理端执行结果的获取
无论命令还是文件是否在代理端执行成功,都需要获取到执行结果返回给中央端。所以这里也涉及一个读取节点上的stdout和stderr的问题。这个总体来说不是很难,都有现成的包。当然这个时候你需要的是阻塞执行,而不能搞异步回调。
还有个问题是,我要尽可能使用python默认就带的包,而尽量不让服务器去访问internet下载第三方的包。
还有代理端最重要的一点,就是python的版本兼容性。centos5用python 2.4,centos6用python 2.6,ubuntu基本默认都是2.7。所以一定要最大限度的保证语言的跨版本兼容性,要是每个操作系统和每一个版本我都写一个代理,我一个人就累死了。
PHP跟Java有什么区别?
一、技术区别
java是纯面向对象开发,功能强大,分支众多,没有java不能做的软件。C/S也好B/S也好。从功能上讲,没有语言可以和java相比。但其优势也是其劣势。
PHP吸收了java和c以及perl等语言优点,专注互联网领域。在WEB领域中PHP拥有得天独厚的优势,WEB领域没有语言可以和PHP相比。
二、数据库访问区别
Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。
PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。例如:用Java开发的Web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。而PHP则需要做大量的修改工作。
三、安全性区别
在同是开源和跨平台的java面前,php丢掉了很多的优势,在代码的安全性上尤为突出。
php的开发程序在别人拿到代码后,可以很容易地进行修改。而java开发的程序由于无法看到完整的源代码,只能看到一些编译好的类文件,所以安全性较高。
四、开发成本比较
PHP在互联网应用诸多方面都强于Java,那么Java开发出的电子商务产品何以与PHP产品竞争呢?这在于Java阵营普遍走的是政府路线,
而PHP阵营走的是全民路线。Java在互联网方面靠的是大学老师的言传身教,才得以在互联网世界狺狺狂啸,而PHP是靠得是自身品质而得民心,所以才一路赞歌。
软件价格的高低很大程度上和自身成本和功能相挂钩。PHP的入门门槛较低,但是任何方面成为高手,都是万里挑一。绝大多数学过c的程序员都很容易转型为PHP程序员,这使得PHP程序员如同国球一样普及,同样更是高手如云,高质量的PHP软件产品也层出不穷。
服务器成本方面,PHP最经典的组合PHP+ MySQL + Apache,Java也是经常与MySQL +
Tomcat、JBoss等软件配合。所有软件都是开源免费的,所以服务器端的投入都并不高。
而Java程序员的学习成
本却是PHP成本的几倍,原因也很晴朗,本身Java就不是专门给WEB开发用的。所以,Java开发电子商务的成本要远远高于PHP开发出来的同类软件
产品。但也正由于Java开发的成本较高,所以往往也是做一个同样的产品,达到同样的效果,Java需要付出比PHP开发多出N倍的时间及经济成本。直接地造成了巨大的时间及成本浪费。
关于phpjava服务器和Java PHP的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
本文由admin于2022-12-19发表在靑年PHP官网,如有疑问,请联系我们。
本文链接:http://www.qnphp.com/post/16725.html