JSPCN主页
JSP空间
JSP技术
JSP下载
关于我们
联系我们
当前位置:
首页
-->
JSP文章
-->
JAVA技术
-->
XML
--> XML-RPC入门
XML-RPC入门
用web_xml控制Web应用的行为(下)转贴
用web_xml控制Web应用的行为(上)待徐
在Web应用中使用XML文件配置数据源
使用xmlhttp和Java session监听改善站内消息系统
J2EE中xml配置文件 (ejb-jar.xml1.1)
windy's j2ee1.4 tutorial (chinese) --Understanding XML(008)
windy's j2ee1.4 tutorial (chinese) --Understanding XML(010)
windy's j2ee1.4 tutorial (chinese) --Understanding XML(009)
利用jdom实现读取数据库生成XML及读取XML文件插入数据库
EasyDBO配置文件easyjf-dbo.xml简介
web.xml 常用结点说明[1]
Java+XML+MVC 框架StrutsCX简介
使用jdom的XPath来快速定位xml节点
XML and Database Tooling(中英文对照版本)
Oracle9中XML SQL Utility技术指导(java)
用 JDOM 简化 XML 编程
简析JAVA的XML编程(to:初学者们)
用JAXB生成一个XML文档
Spring XML配置十二个最佳实践
更多...
XML-RPC入门
作者: 文章来源:
发布日期:2007年04月24日 浏览次数:822次
一、什么是XML-RPC
xml-rpc 是一套允许运行在不同操作系统、不同环境的程序实现基于internet过程调用的规范和一系列的实现。
这种远程过程调用使用http作为传输协议,xml作为传送信息的编码格式。Xml-Rpc的定义尽可能的保持了简单,但同时能够传送、处理、返回复杂的数据结构。
Xml-rpc是工作在internet上的远程过程调用协议。一个xml-rpc消息就是一个请求体为xml的http-post请求,被调用的方法在服务器端执行并将执行结果以xml格式编码后返回。
Request
example
Here's an example of an XML-RPC request:
POST /RPC2 HTTP1.0
User-Agent: Frontier5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: textxml
Content-
length
: 181
<?xml version=
"1.0"
?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>
Response example
Here's an example of a response to an XML-RPC request:
HTTP1.1 200 OK
Connection
: close
Content-Length: 158
Content-Type: textxml
Date
: Fri, 17 Jul 1998 19:55:08 GMT
Server: UserLand Frontier5.1.2-WinNT
<?xml version=
"1.0"
?>
<methodResponse>
<params>
<param>
<value><string>South Dakota</string></value>
</param>
</params>
</methodResponse>
二、xml-rpc入门程序
以下的入门程序包括一个管理器(HelloHandler)、一个服务器(HelloServer)、一个客户程序(HelloClient)。
首先要做的是创建用于远程过程调用的类和方法,人们常常称之为管理器。Xml-rpc管理器是一个方法和方法集,它接受xml-rpc请求,并对请求的内容进行解码,再向一个类和方法发出请求。
//管理器类
package
xmlRpc;
/**
* @author trier
*
* <b><code>HelloHandler</code></b> is a simple handler than can
* be registered with an XML-RPC server
*/
public
class
HelloHandler {
public
String
sayHello(
String
name){
return
"Hello "
+ name;
}
}
服务器程序将创建的管理器注册到服务器上,并为服务器指明应用程序其他特定的参数。
//服务器类
package
xmlRpc;
/**
*
* <b><code>HelloServer</code></b> is a simple XML-RPC server
* that will take the <code>HelloHandler</code> class available
* for XML-PRC calls.
*
*/
import
org.apache.xmlrpc.WebServer;
import
org.apache.xmlrpc.XmlRpc;
import
java.io.
IOException
;
public
class
HelloServer {
public
static
void
main(
String
[] args){
if
(args.
length
<1){
System
.out.println(
"Usage: java HelloServer [port]"
);
System
.exit(-1);
}
try
{
XmlRpc.setDriver(
"org.apache.xerces.parsers.SAXParser"
);
//start the server
System
.out.println(
"Starting XML-RPC Server......"
);
WebServer server =
new
WebServer(
Integer
.parseInt(args[0]));
//register our handler class
server.addHandler(
"hello"
,
new
HelloHandler());
System
.out.println(
"Now accepting requests......"
);
}
catch
(
ClassNotFoundException
e){
System
.out.println(
"Could not locate SAX Driver"
);
}
catch
(
IOException
e){
System
.out.println(
"Could not start server: "
+e.getMessage());
}
}
}
//客户程序
package
xmlRpc;
/**
*
* <b><code>HelloClient</code></b> is a simple XML-RPC client
* that makes an XML-RPC request to <code>HelloServer</code>
*/
import
java.io.
IOException
;
import
java.util.
Vector
;
import
org.apache.xmlrpc.XmlRpc;
import
org.apache.xmlrpc.XmlRpcClient;
import
java.net.
MalformedURLException
;
import
org.apache.xmlrpc.XmlRpcException;
public
class
HelloClient {
public
static
void
main(
String
[] args){
if
(args.
length
<1){
System
.out.println(
"Usage: java HelloClient [your name]"
);
System
.exit(-1);
}
try
{
//Use the Apache Xereces SAX Driver
XmlRpc.setDriver(
"org.apache.xerces.parsers.SAXParser"
);
//Specify the server
XmlRpcClient client =
new
XmlRpcClient(
"http://localhost:8585"
);
//create request
Vector
params =
new
Vector
();
params.addElement(args[0]);
//make a request and print the result
String
result = (
String
)client.execute(
"hello.sayHello"
,params);
System
.out.println(
"Response from server: "
+ result);
}
catch
(
ClassNotFoundException
e){
System
.out.println(
"Could not locate SAX Driver"
);
}
catch
(
MalformedURLException
e){
System
.out.println(
"Incorrect URL fro xml-rpc server foramt:"
+e.getMessage());
}
catch
(XmlRpcException e){
System
.out.println(
"XmlRpcException :"
+e.getMessage());
}
catch
(
IOException
e){
System
.out.println(
"IOException:"
+e.getMessage());
}
}
}
三、RPC和RMI的简单比较
在RMI和RPC之间最主要的区别在于方法是如何别调用的。在RMI中,远程接口使每个远程方法都具有方法签名。如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。在RPC中,当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。这就向RPC服务器表明,被请求的方法在为“classname”的类中,名叫“methodname”。然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。这里的参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。
trier 整理:
参考资料:
http://www.xmlrpc.com/
《java&xml》O'Reilly
JSP虚拟主机,JSP空间
Copyright © 2002-2012 JSPCN.net. All rights reserved.
JSP中文网 备案号:粤ICP备09171188号
成都恒海科技发展有限公司 成都市一环路南二段6号新瑞楼三楼8号