一、学习xml rpc的基础知识和如何使用
http://limu713.blog.163.com/blog/static/15086904201141751743218/
最近的云计算管理平台项目中,我们的web门户需要调用底层的虚拟机相关的函数,一直觉得很神奇(偶是一个不懂web的孩子~),web前端怎么就跟后台的那些处理函数联系起来的呢,今天有时间,花了半天的时间大致搞明白了究竟是咋回事。
先是看了大家提交上来的文档,才知道是xmp-rpc在做事,前后端的代码就是通过它进行通信的,前端(外部)语言可以为ruby或者java等,发送请求,根据该请求,找到xml-rpc中对应的命令,比如,one.vn.info,然后xmp-rpc接收并处理该请求,最终是调用底层的RequestManager类中的相应函数。服务器端处理后,再将结果返回给客户端,即前端的程序。
但是,因为还不是特别明白,今天从网上查了些资料,了解了xmp-rpc的大致情况,以下为我的简单总结。
1、xml-rpc是什么?
XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用。它是一套允许运行在不同操作系统、不同环境的程序实现基于Internet过程调用的规范和一系列的实现。这种远程过程调用使用http作为传输协议,XML作为传送信息的编码格式。Xml-Rpc的定义尽可能的保持了简单,但同时能够传送、处理、返回复杂的数据结构
简单来讲,一个rpc系统,必然包括2个部分:
A、rpc client,用来向rpc server调用方法,并接收方法的返回数据;
B、rpc server,用于响应rpc client的请求,执行方法,并回送方法执行结果。
2、xml-rpc的工作原理
简单描述,xml-rpc的工作原理为:
rpc-client的工作原理:rpcclient根据URL找到rpcserver -> 构造命令包,调用rpcserver上的某个服务的某个方法 -> 接收到rpcserver的返回,解析响应包,拿出调用的返回结果。
rpc-server的工作原理:启动一个webserver(在使用内置的webserver的情况下) -> 注册每个能提供的服务,每个服务对应一个Handler类 ->进入服务监听状态。
下面是从网上找的一个图,很明白的说明它的工作原理:
比起DCOM、CORBA、SOAP,它的优点主要是:
1)简单、轻量级;
2)XML编码,可读性增强,同时也便于手工修改;
3)利用HTTP传输,方便的穿透防火墙(80端口),便于使用SSL加密等。
缺点:
1)对字符编码的支持不够,通常用Base64编码来解决中文问题;
2)Datetime数据类型没有时区;
3、实例
下面是一个简单的例子,说明如何使用xml-rpc进行编程,包括客户端和服务器端的代码
服务器使用内置的webserver,端口号为9001,启动服务器服务,监听客户端的请求;客户端发送两个值,服务器调用函数,经过处理后,返回这两个值的加和减的值。
//********************************* 客户端代码************************************//
package test;
import java.util.*;
import org.apache.xmlrpc.*;
public class XmlRPCClient {
// 服务器端的url
private final static String server_url =
"http://localhost:9001";
public static void main(String[] args) throws Exception{
XmlRpc.debug = true;
// Create an object to represent our server.
XmlRpcClient server = new XmlRpcClient(server_url);
// Build our parameter list.
Vector params = new Vector();
params.addElement(new Integer(5));
params.addElement(new Integer(3));
// Call the server, and get our result.
//mysample为handler的名称,sumAndDifference为调用的函数名称
Hashtable result = (Hashtable) server.execute("mysample.sumAndDifference",
params);
int sum = ( (Integer) result.get("sum")).intValue();
int difference = ( (Integer) result.get("difference")).intValue();
System.out.println("Sum: " + Integer.toString(sum) +
", Difference: " +
Integer.toString(difference));
}
}
//********************************* ************************************//
//********************************** 服务器端代码************************************//
package test;
import java.util.*;
import org.apache.xmlrpc.WebServer;
public class JavaServer {
public JavaServer() {
}
public Hashtable sumAndDifference(int x, int y) {
Hashtable result = new Hashtable();
result.put("sum", new Integer(x + y));
result.put("difference", new Integer(x - y));
return result;
}
public static void main(String[] args) {
try {
// Invoke me as <http://localhost:9001/RPC2>.
WebServer webserver = new WebServer(9001);
webserver.addHandler("mysample", new JavaServer());
webserver.start();
}
catch (Exception exception) {
System.err.println("JavaServer: " + exception.toString());
}
}
}
/***************************************************************************************/
二、安装svn软件,并从服务器上下载代码
三、继续熟悉newpayweb代码,学习了订单的生成规则和一些基础知识
1.Random r = new Random; r.netInt(int a); 生成0-a之间的随机数。
2.request.getRemoteAddr();
三、连接sql server 2000数据库