DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> XML-RPC入門
XML-RPC入門
編輯:XML詳解     

一、什麼是XML-RPC


XML-rpc 是一套允許運行在不同操作系統、不同環境的程序實現基於internet過程調用的規范和一系列的實現。
這種遠程過程調用使用http作為傳輸協議,xml作為傳送信息的編碼格式。XML-Rpc的定義盡可能的保持了簡單,但同時能夠傳送、處理、返回復雜的數據結構。
Xml-rpc是工作在internet上的遠程過程調用協議。一個xml-rpc消息就是一個請求體為xml的http-post請求,被調用的方法在服務器端執行並將執行結果以XML格式編碼後返回。
  1. Request example 
  2. Here's an example of an XML-RPC request: 
  3. POST /RPC2 HTTP1.0
  4. User-Agent: FrontIEr5.1.2 (WinNT)
  5. Host: betty.userland.com
  6. Content-Type: textXML
  7. Content-length: 181
  8. <?XML version="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. Response example 
  2. Here's an example of a response to an XML-RPC request: 
  3. HTTP1.1 200 OK
  4. Connection: close
  5. Content-Length: 158
  6. Content-Type: textXML
  7. Date: Fri, 17 Jul 1998 19:55:08 GMT
  8. Server: UserLand FrontIEr5.1.2-WinNT
  9. <?XML version="1.0"?>
  10. <methodResponse>
  11.    <params>
  12.       <param>
  13.          <value><string>South Dakota</string></value>
  14.          </param>
  15.       </params>
  16.    </methodResponse>

二、XML-rpc入門程序


以下的入門程序包括一個管理器(HelloHandler)、一個服務器(HelloServer)、一個客戶程序(HelloClIEnt)。
首先要做的是創建用於遠程過程調用的類和方法,人們常常稱之為管理器。Xml-rpc管理器是一個方法和方法集,它接受XML-rpc請求,並對請求的內容進行解碼,再向一個類和方法發出請求。
//管理器類
  1. package XMLRpc;
  2. /**
  3.  * @author trIEr
  4.  *
  5.  * <b><code>HelloHandler</code></b> is a simple handler than can 
  6.  *  be registered with an XML-RPC server
  7.  */
  8. public class HelloHandler {
  9.     public String sayHello(String name){
  10.         return "Hello " + name;
  11.     }
  12. }
服務器程序將創建的管理器注冊到服務器上,並為服務器指明應用程序其他特定的參數。
//服務器類
  1. package XMLRpc;
  2. /**
  3.  *
  4.  * <b><code>HelloServer</code></b> is a simple XML-RPC server
  5.  * that will take the <code>HelloHandler</code> class available
  6.  * for XML-PRC calls.
  7.  * 
  8.  */
  9. import org.apache.XMLrpc.WebServer;
  10. import org.apache.xmlrpc.XMLRpc;
  11. import Java.io.IOException;
  12. public class HelloServer {
  13.     public static void main(String[] args){
  14.         if(args.length<1){
  15.             System.out.println("Usage: Java HelloServer [port]");
  16.             System.exit(-1);
  17.         }
  18.         try{
  19.             XMLRpc.setDriver("org.apache.xerces.parsers.SAXParser");
  20.             //start the server
  21.             System.out.println("Starting XML-RPC Server......");
  22.             WebServer server = new WebServer(Integer.parseInt(args[0]));
  23.             //register our handler class
  24.             server.addHandler("hello",new HelloHandler());
  25.             System.out.println("Now accepting requests......");
  26.         }catch(ClassNotFoundException e){
  27.             System.out.println("Could not locate SAX Driver");
  28.         }catch(IOException e){
  29.             System.out.println("Could not start server: "+e.getMessage());
  30.         }
  31.     }
  32. }
//客戶程序
  1. package XMLRpc;
  2. /**
  3. *
  4.   * <b><code>HelloClIEnt</code></b> is a simple XML-RPC clIEnt
  5.  * that makes an XML-RPC request to <code>HelloServer</code>
  6.  */
  7. import Java.io.IOException;
  8. import Java.util.Vector;
  9. import org.apache.xmlrpc.XMLRpc;
  10. import org.apache.xmlrpc.XMLRpcClIEnt;
  11. import Java.Net.MalformedURLException;
  12. import org.apache.xmlrpc.XMLRpcException;
  13. public class HelloClIEnt {
  14.     public static void main(String[] args){
  15.         if(args.length<1){
  16.             System.out.println("Usage: Java HelloClIEnt [your name]");
  17.             System.exit(-1);
  18.         }
  19.         try{
  20.             //Use the apache Xereces SAX Driver
  21.             XMLRpc.setDriver("org.apache.xerces.parsers.SAXParser");
  22.             
  23.             //Specify the server
  24.             XMLRpcClient clIEnt = new XMLRpcClIEnt("http://localhost:8585");
  25.             
  26.             //create request
  27.             Vector params = new Vector();
  28.             params.addElement(args[0]);
  29.             
  30.             //make a request and print the result
  31.             String result = (String)clIEnt.execute("hello.sayHello",params);
  32.             System.out.println("Response from server: "+ result);
  33.         }catch(ClassNotFoundException e){
  34.             System.out.println("Could not locate SAX Driver");
  35.         }catch(MalformedURLException e){
  36.             System.out.println("Incorrect URL fro XML-rpc server foramt:"+e.getMessage());
  37.         }catch(XMLRpcException e){
  38.             System.out.println("XMLRpcException :"+e.getMessage());    
  39.         }catch(IOException e){
  40.             System.out.println("IOException:"+e.getMessage());
  41.         }
  42.     }
  43. }

三、RPC和RMI的簡單比較


在RMI和RPC之間最主要的區別在於方法是如何別調用的。在RMI中,遠程接口使每個遠程方法都具有方法簽名。如果一個方法在服務器上執行,但是沒有相匹配的簽名被添加到這個遠程接口上,那麼這個新方法就不能被RMI客戶方所調用。在RPC中,當一個請求到達RPC服務器時,這個請求就包含了一個參數集和一個文本值,通常形成“classname.methodname”的形式。這就向RPC服務器表明,被請求的方法在為“classname”的類中,名叫“methodname”。然後RPC服務器就去搜索與之相匹配的類和方法,並把它作為那種方法參數類型的輸入。這裡的參數類型是與RPC請求中的類型是匹配的。一旦匹配成功,這個方法就被調用了,其結果被編碼後返回客戶方。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved