1.XML-RPC server端采用Apache XML-RPC
package
xmlrpc;
public class Calculator ... {
public int add(int i1, int i2) ...{
return i1 + i2;
}
public int subtract(int i1, int i2) ...{
return i1 - i2;
}
}
public class Calculator ... {
public int add(int i1, int i2) ...{
return i1 + i2;
}
public int subtract(int i1, int i2) ...{
return i1 - i2;
}
}
package
xmlrpc.servlet;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.xmlrpc.XmlRpcServer;
import xmlrpc.Calculator;
public class CalculatorServlet extends HttpServlet ... {
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException ...{
XmlRpcServer server = new XmlRpcServer();
server.addHandler("CalculatorService", new Calculator());
byte[] result = server.execute(request.getInputStream());
response.setContentType("text/xml; charset=UTF-8");
response.setContentLength(result.length);
OutputStream out = response.getOutputStream();
out.write(result);
out.flush();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException ...{
doPost(request, response);
}
}
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.xmlrpc.XmlRpcServer;
import xmlrpc.Calculator;
public class CalculatorServlet extends HttpServlet ... {
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException ...{
XmlRpcServer server = new XmlRpcServer();
server.addHandler("CalculatorService", new Calculator());
byte[] result = server.execute(request.getInputStream());
response.setContentType("text/xml; charset=UTF-8");
response.setContentLength(result.length);
OutputStream out = response.getOutputStream();
out.write(result);
out.flush();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException ...{
doPost(request, response);
}
}
<?
xml version="1.0" encoding="UTF-8"
?>
< web-app xmlns ="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" version ="2.4"
xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
< servlet >
< servlet-name > CalculatorServlet </ servlet-name >
< servlet-class >
xmlrpc.servlet.CalculatorServlet
</ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name > CalculatorServlet </ servlet-name >
< url-pattern > /CalculatorServlet </ url-pattern >
</ servlet-mapping >
< welcome-file-list >
< welcome-file > index.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
< web-app xmlns ="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" version ="2.4"
xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
< servlet >
< servlet-name > CalculatorServlet </ servlet-name >
< servlet-class >
xmlrpc.servlet.CalculatorServlet
</ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name > CalculatorServlet </ servlet-name >
< url-pattern > /CalculatorServlet </ url-pattern >
</ servlet-mapping >
< welcome-file-list >
< welcome-file > index.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
2.XML-RPC client端采用Ruben Daniels的javascript实现
<!
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
>
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
< title > 访问XMLRPC </ title >
< script src ="scripts/vcXMLRPC.js" ></ script >
< script type ="text/javascript" > ...
<!--
var AllFunc = XMLRPC.getService("http://localhost:8080/xfire/CalculatorServlet");
AllFunc.add("CalculatorService.subtract", "subtract");
AllFunc.add("CalculatorService.add", "add");
/**//**
* calculate the sum of add1 and add2 and put the result of the XML-RPC
* call into sum text
*/
function add()...{
try ...{
var add1 = parseInt(document.getElementById("add1").value);
var add2 = parseInt(document.getElementById("add2").value);
var response = AllFunc.add(add1,add2);
document.getElementById("sum").value = response;
} catch(e) ...{
alert(e.description + " 注意:请输入整数!");
}
}
function subtract()...{
try ...{
var subtract1 = parseInt(document.getElementById("subtract1").value);
var subtract2 = parseInt(document.getElementById("subtract2").value);
var response = AllFunc.subtract(subtract1,subtract2);
document.getElementById("subtract").value = response;
} catch(e) ...{
alert(e.description + " 注意:请输入整数!");
}
}
//-->
</ script >
</ head >
< body >
< input type ="text" name ="add1" size ="10" > +
< input type ="text" name ="add2" size ="10" > =
< input type ="text" name ="sum" size ="10" >
< input type ="button" value ="求和" onclick ="add();" >
< br >
< input type ="text" name ="subtract1" size ="10" > -
< input type ="text" name ="subtract2" size ="10" > =
< input type ="text" name ="subtract" size ="10" >
< input type ="button" value ="求差" onclick ="subtract();" >
</ body >
</ html >
< html >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
< title > 访问XMLRPC </ title >
< script src ="scripts/vcXMLRPC.js" ></ script >
< script type ="text/javascript" > ...
<!--
var AllFunc = XMLRPC.getService("http://localhost:8080/xfire/CalculatorServlet");
AllFunc.add("CalculatorService.subtract", "subtract");
AllFunc.add("CalculatorService.add", "add");
/**//**
* calculate the sum of add1 and add2 and put the result of the XML-RPC
* call into sum text
*/
function add()...{
try ...{
var add1 = parseInt(document.getElementById("add1").value);
var add2 = parseInt(document.getElementById("add2").value);
var response = AllFunc.add(add1,add2);
document.getElementById("sum").value = response;
} catch(e) ...{
alert(e.description + " 注意:请输入整数!");
}
}
function subtract()...{
try ...{
var subtract1 = parseInt(document.getElementById("subtract1").value);
var subtract2 = parseInt(document.getElementById("subtract2").value);
var response = AllFunc.subtract(subtract1,subtract2);
document.getElementById("subtract").value = response;
} catch(e) ...{
alert(e.description + " 注意:请输入整数!");
}
}
//-->
</ script >
</ head >
< body >
< input type ="text" name ="add1" size ="10" > +
< input type ="text" name ="add2" size ="10" > =
< input type ="text" name ="sum" size ="10" >
< input type ="button" value ="求和" onclick ="add();" >
< br >
< input type ="text" name ="subtract1" size ="10" > -
< input type ="text" name ="subtract2" size ="10" > =
< input type ="text" name ="subtract" size ="10" >
< input type ="button" value ="求差" onclick ="subtract();" >
</ body >
</ html >
参考资料:
http://www.vcdn.org/Public/XMLRPC
http://blog.csdn.net/faust/archive/2005/11/14/529374.aspx
http://blog.csdn.net/fyun/archive/2004/05/17/6463.aspx
http://blog.csdn.net/mabaolin/archive/2007/08/20/1751006.aspx