Xml_Rpc是采用http协议通过xml数据格式实现rpc(远程调用过程)一个项目。项目主页:http://ws.apache.org/xmlrpc/在download页面中可以下载xml_rpc的jar包。在Documenttation中有只用说明和小例子可以简单的做参考。
下面是对一个helloworld的程序代码解释:
Rpc是一种实现远程调用过程的规范,它区别于大家熟知的最基本的本地调用。它实现了不同服务器跨域访问。狭义的讲:通过一个客户端连接到远程服务器调用服务端的对象。
首先写一个server:RpcSever.java
在sever端用到一个Handler它是一个专门被客户端调用的类,它的创建和普通的类一样,但你会发现它实现了一个接口,可能是在客户端调用服务端实例的时候采用了动态代理必须用接口否则创建代理不成功,这种实现也充分体现了安全性。在以前的版本并没有考虑到这点可能后来加上去的。
Handler:HelloHandler.java
在这里就不列出接口的代码了,很容易看出。
最后创建客户端:RpcClient.java
下面是对一个helloworld的程序代码解释:
Rpc是一种实现远程调用过程的规范,它区别于大家熟知的最基本的本地调用。它实现了不同服务器跨域访问。狭义的讲:通过一个客户端连接到远程服务器调用服务端的对象。
首先写一个server:RpcSever.java
//创建一个webServer的实例绑定在8080端口上,重载方法中第二的参数为绑定的IP地址默认为本地
WebServer webServer = new WebServer(8080);
//创建以property形式的Handler映射
PropertyHandlerMapping phm = new PropertyHandlerMapping();
//添加handler
phm.addHandler(DefaultHandler.class.getName(), HelloHandler.class);
//启用void的方法
phm.setVoidMethodEnabled(true);
//从webserver的实例中获得一个XmlRpcServer的实例
XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();
//将创建好的handler映射对象填充到xmlRpcServer的实例中
xmlRpcServer.setHandlerMapping(phm);
//获取xmlrpcServer的配置对象
XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
//修改xmlrpcServer的配置对象中的属性
serverConfig.setEnabledForExtensions(true);
serverConfig.setContentLengthOptional(false);
//启动webServer 它其实就是一个简单web服务器,启动后会处理客户端发过来请求
webServer.start();
在sever端用到一个Handler它是一个专门被客户端调用的类,它的创建和普通的类一样,但你会发现它实现了一个接口,可能是在客户端调用服务端实例的时候采用了动态代理必须用接口否则创建代理不成功,这种实现也充分体现了安全性。在以前的版本并没有考虑到这点可能后来加上去的。
Handler:HelloHandler.java
public class HelloHandler implements DefaultHandler{
public String sayHello(String name){
System.out.println("接受到请求!");
return name+":客户你好!";
}
}
在这里就不列出接口的代码了,很容易看出。
最后创建客户端:RpcClient.java
//创建XmlRpcClientConfigImpl看类名就可知道这个是用来配置XmlRpcClient参数的
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
//设置要连接远程服务器
config.setServerURL(new URL("http://127.0.0.1:8080"));
config.setEnabledForExtensions(true);
//设置连接超时的时间
config.setConnectionTimeout(60 * 1000);
config.setReplyTimeout(60 * 1000);
//创建XmlRpcClient对象
XmlRpcClient client = new XmlRpcClient();
//填充XmlRpcClient的配置信息
client.setConfig(config);
//通过util包中的ClientFactory类方便管理XmlRpcClient的实例
ClientFactory factory = new ClientFactory(client);
//通过ClientFactory创建要远程调用对象的代理对象,用接口接收
DefaultHandler echo = (DefaultHandler) factory.newInstance(DefaultHandler.class);
//调用接口暴露出的可见的方法
System.out.println(echo.sayHello("luoxun"));