apache xmlrpc java_java XML-RPC

1.XML-RPC简介

xml rpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。一个rpc系统,必然包括2个部分:1.rpc client,用来向rpc server调用方法,并接收方法的返回数据;2.rpc server,用于响应rpc client的请求,执行方法,并回送方法执行结果。

按照“数据即程序”的观点来看,RPC无非是借助一些通信手段来互相传递数据(信息),所以她也是“高”层次的通信手段,无非是这种通信手段看起来更像是“过程的调用”,因为她往往以一个“函数”的面目示人,从而掩盖了她交换信息的实质。

工作原理描述;

1. rpcclient的工作原理:rpcclient根据URL找到rpcserver -> 构造命令包,调用rpcserver上的某个服务的某个方法 -> 接收到rpcserver的返回,解析响应包,拿出调用的返回结果。

2. rpcserver的工作原理:启动一个webserver(在使用内置的webserver的情况下) -> 注册每个能提供的服务,每个服务对应一个Handler类 ->进入服务监听状态。

2.基于RPC的java简单应用

我们在提供远程接口时可以使用webservice的方式,使用xmlrpc同样也可以实现,并且开发简单。实现的方式有许多种,以下采用httpservlet的方式实现

需要使用到的jar包:xercesImpl.jar    xmlrpc-2.0.1.jar    commons-codec_1.3.jar

1、业务处理接口

packagecom.flyoung.xmlrpc;public interfaceServicesHandler {publicString execute(String str);

}

2、业务接口实现

packagecom.flyoung.xmlrpc;public interfaceServicesHandler {publicString execute(String str);

}

3、客户端

packagecom.flyoung.xmlrpc;importjava.net.MalformedURLException;importjava.net.URL;importjava.util.Vector;importorg.apache.xmlrpc.XmlRpcException;importorg.apache.xmlrpc.client.XmlRpcClient;importorg.apache.xmlrpc.client.XmlRpcClientConfigImpl;public classTestClient {/***@paramargs*/

public static voidmain(String[] args) {try{//配置客户端

XmlRpcClientConfigImpl config = newXmlRpcClientConfigImpl();//设置服务器端地址

config.setServerURL(new URL("http://localhost:8080/Rpc/HelloHandler"));//创建XmlRpc客户端

XmlRpcClient client = newXmlRpcClient();//绑定以上设置

client.setConfig(config);//创建参数列表

Vector params = new Vector();

params.addElement("flyoung");//执行XML-RPC 请求

String result =(String) client.execute("HelloHandler.execute", params);

System.out.println("result:"+result);

}catch(MalformedURLException e) {

e.printStackTrace();

}catch(XmlRpcException e) {

e.printStackTrace();

}

}

}

4、服务器端

packagecom.flyoung.xmlrpc;importjava.io.IOException;importjavax.servlet.ServletConfig;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.xmlrpc.XmlRpcException;importorg.apache.xmlrpc.server.PropertyHandlerMapping;importorg.apache.xmlrpc.server.XmlRpcServerConfigImpl;importorg.apache.xmlrpc.webserver.XmlRpcServletServer;importcom.flyoung.xmlrpc.HelloHandler;public class XmlRpcServicesServlet extendsHttpServlet {privateXmlRpcServletServer server;

@Overridepublic void init(ServletConfig config) throwsServletException {super.init(config);try{//创建XmlRpcServletServer对象

server = newXmlRpcServletServer();//set up handler mapping of XmlRpcServletServer object

PropertyHandlerMapping pmp = newPropertyHandlerMapping();

pmp.addHandler("HelloHandler", HelloHandler.class);

server.setHandlerMapping(pmp);//more config of XmlRpcServletServer object

XmlRpcServerConfigImpl serverConfig =(XmlRpcServerConfigImpl)server.getConfig();

serverConfig.setEnabledForExtensions(true);

serverConfig.setContentLengthOptional(false);

}catch(XmlRpcException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

@Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {

server.execute(req, resp);

}

@Overrideprotected voiddoPost(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {

server.execute(req, resp);

}

}

5、XML配置

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

index.jsp

XmlRpcServer

com.flyoung.xmlrpc.XmlRpcServicesServlet

XmlRpcServer

/HelloHandler

3.总结

在RPC中,当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。这就向RPC服务器表明,被请求的方法在为“classname”的类中,名叫“methodname”。然后RPC服务器就去搜  索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。这里的参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。

缺点:

1)XML-RPC的消息系统过于简单,没有完整意义上的消息模型

2)XML-RPC调用服务的方式要求直接指定对象和方法,称不上完整的面向服务的体系

3)XML-RPC服务器端提供的服务实际上是特定对象的某个方法,限制了服务器端的开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值