专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »XML教程 » xmlrpc:什么是XML-RPC »正文

xmlrpc:什么是XML-RPC

来源: 发布时间:星期四, 2009年2月12日 浏览:108次 评论:0


、什么是XML-RPC


xml-rpc是套允许运行在区别操作系统、区别环境实现基于ernet过程规范标准和系列实现
这种远程过程使用http作为传输协议xml作为传送信息编码格式Xml-Rpc定义尽可能保持了简单但同时能够传送、处理、返回复杂数据结构
Xml-rpc是工作在ernet上远程过程协议个xml-rpc消息就是个请求体为xmlhttp-post请求思路方法在服务器端执行并将执行结果以xml格式编码后返回
  1. Requestexample
  2. Here\'sanexampleofanXML-RPCrequest:
  3. POST/RPC2HTTP1.0
  4. User-Agent:Frontier5.1.2(WinNT)
  5. Host:betty.userland.com
  6. Content-Type:textxml
  7. Content-length:181
  8. <?xmlversion=\"1.0\"?>
  9. <methodCall>
  10. <methodName>examples.getStateName</methodName>
  11. <params>
  12. <param>
  13. <value><i4>41</i4></value>
  14. </param>
  15. </params>
  16. </methodCall>

  1. Responseexample
  2. Here\'sanexampleofaresponoanXML-RPCrequest:
  3. HTTP1.1200OK
  4. Connection:close
  5. Content-Length:158
  6. Content-Type:textxml
  7. Date:Fri,17Jul199819:55:08GMT
  8. Server:UserLandFrontier5.1.2-WinNT
  9. <?xmlversion=\"1.0\"?>
  10. <methodResponse>
  11. <params>
  12. <param>
  13. <value><>SouthDakota</></value>
  14. </param>
  15. </params>
  16. </methodResponse>


2、xml-rpc入门


以下入门包括个管理器(HelloHandler)、个服务器(HelloServer)、个客户(HelloClient)
首先要做是创建用于远程过程类和思路方法人们常常称的为管理器Xml-rpc管理器是个思路方法和思路方法集它接受xml-rpc请求并对请求内容进行解码再向个类和思路方法发出请求
//管理器类
  1. packagexmlRpc;
  2. /**
  3. *@authortrier
  4. *
  5. *<b><code>HelloHandler</code></b>isasimplehandlerthancan
  6. *beregisteredwithanXML-RPCserver
  7. */
  8. publicHelloHandler{
  9. publicStringsayHello(Stringname){
  10. \"Hello\"+name;
  11. }
  12. }

服务器将创建管理器注册到服务器上并为服务器指明应用其他特定参数
//服务器类
  1. packagexmlRpc;
  2. /**
  3. *
  4. *<b><code>HelloServer</code></b>isasimpleXML-RPCserver
  5. *thatwilltakethe<code>HelloHandler</code>available
  6. *forXML-PRCcalls.
  7. *
  8. */
  9. importorg.apache.xmlrpc.WebServer;
  10. importorg.apache.xmlrpc.XmlRpc;
  11. importjava.io.IOException;
  12. public

    HelloServer{
  13. publicvoid(Stringargs){
  14. (args.length<1){
  15. .out.prln(\"Usage:javaHelloServer[port]\");
  16. .exit(-1);
  17. }
  18. try{
  19. XmlRpc.Driver(\"org.apache.xerces.parsers.SAXParser\");
  20. //starttheserver
  21. .out.prln(\"StartingXML-RPCServer......\");
  22. WebServerserver=WebServer(Integer.parseInt(args[0]));
  23. //registerourhandler
  24. server.addHandler(\"hello\",HelloHandler);
  25. .out.prln(\"Nowacceptingrequests......\");
  26. }catch(ClassNotFoundExceptione){
  27. .out.prln(\"CouldnotlocateSAXDriver\");
  28. }catch(IOExceptione){
  29. .out.prln(\"Couldnotstartserver:\"+e.getMessage);
  30. }
  31. }
  32. }

//客户
  1. packagexmlRpc;
  2. /**
  3. *
  4. *<b><code>HelloClient</code></b>isasimpleXML-RPCclient
  5. *thatmakesanXML-RPCrequestto<code>HelloServer</code>
  6. */
  7. importjava.io.IOException;
  8. importjava.util.Vector;
  9. importorg.apache.xmlrpc.XmlRpc;
  10. import

    org.apache.xmlrpc.XmlRpcClient;
  11. importjava.net.MalformedURLException;
  12. importorg.apache.xmlrpc.XmlRpcException;
  13. publicHelloClient{
  14. publicvoid(Stringargs){
  15. (args.length<1){
  16. .out.prln(\"Usage:javaHelloClient[yourname]\");
  17. .exit(-1);
  18. }
  19. try{
  20. //UheApacheXerecesSAXDriver
  21. XmlRpc.Driver(\"org.apache.xerces.parsers.SAXParser\");
  22. //Specytheserver
  23. XmlRpcClientclient=XmlRpcClient(\"http://localhost:8585\");
  24. //createrequest
  25. Vectorparams=Vector;
  26. params.addElement(args[0]);
  27. //makearequestandprtheresult
  28. Stringresult=(String)client.execute(\"hello.sayHello\",params);
  29. .out.prln(\"Responsefromserver:\"+result);
  30. }catch(ClassNotFoundExceptione){
  31. .out.prln(\"CouldnotlocateSAXDriver\");
  32. }catch(MalformedURLExceptione){


  33. .out.prln(\"IncorrectURLfroxml-rpcserverforamt:\"+e.getMessage);
  34. }catch(XmlRpcExceptione){
  35. .out.prln(\"XmlRpcException:\"+e.getMessage);
  36. }catch(IOExceptione){
  37. .out.prln(\"IOException:\"+e.getMessage);
  38. }
  39. }
  40. }


3、RPC和RMI简单比较


在RMI和RPC的间最主要区别在于思路方法是如何别在RMI中远程接口使每个远程思路方法都具有思路方法签名如果个思路方法在服务器上执行但是没有相匹配签名被添加到这个远程接口上那么这个新思路方法就不能被RMI客户方所在RPC中个请求到达RPC服务器时这个请求就包含了个参数集和个文本值通常形成“name.methodname”形式这就向RPC服务器表明被请求思路方法在为“name”类中名叫“methodname”然后RPC服务器就去搜索和的相匹配类和思路方法并把它作为那种思路方法参数类型输入这里参数类型是和RPC请求中类型是匹配旦匹配成功这个思路方法就被其结果被编码后返回客户方
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: