我们在提供远程接口时可以使用webservice的方式,使用xmlrpc同样也可以实现,并且开发简单。实现的方式有许多种,以下采用httpservlet的方式实现
需要使用到的jar包:xercesImpl.jar xmlrpc-2.0.1.jar commons-codec_1.3.jar 见附件
1、写个接口实现类
import java.io.IOException;
public class ServerDemo {
//验证登陆
public byte[] checkLogin(byte[] username,byte[] password){
if(new String(username).equals("allen")&&new String(password).equals("123456")){
return "登陆成功".getBytes();
}else
{
return "登陆失败".getBytes();
}
}
}
2、写个初始化的servlet
package com.xml.rpc.server;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.xmlrpc.XmlRpcServer;
public class XrpcProxyServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private XmlRpcServer xmlrpc = new XmlRpcServer();
public XrpcProxyServlet() {
}
public void init() throws ServletException {
xmlrpc.addHandler("xmlrpcOrder", new ServerDemo());
xmlrpc.setMaxThreads(30);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
byte[] result = xmlrpc.execute(request.getInputStream());
response.setContentType("text/xml");
response.setContentLength(result.length);
OutputStream out = response.getOutputStream();
out.write(result);
out.flush();
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
3、在web.xml中配置这个servlet
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.xml.rpc.server.XrpcProxyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/xmlrpc</url-pattern>
</servlet-mapping>
以上服务端的代码完成,下面是客户端调用的实现:
XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser");
XmlRpcClient client = new XmlRpcClient("http://localhost:8080/XmlRpc/xmlrpc");
Vector params = new Vector();
params.addElement("allen".getBytes());
params.addElement("123456".getBytes());
username.setText("----alen");
byte[] flag=(byte[])client.execute("xmlrpcOrder.checkLogin",params);
System.out.println("-----调用成功");
-----------------------------------------------------------------
以上实现类的创建方式采用new的方式,若采用spring框架也可以采用注入的方式,
上次用spring的mvc框架实现,实现方式这里也贴一下,在Controller中:
@Controller
public class XmlrpcController extends AbstractController implements InitializingBean {
@Autowired
private OrderService orderService;
XmlRpcServer server=null;
@RequestMapping("/xmlprc.action")
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
byte[] resp = server.execute(request.getInputStream());
response.getOutputStream().write(resp);
return null;
}
public void afterPropertiesSet() throws Exception {
server= new XmlRpcServer();
server.addHandler("xmlrpcOrder", orderService);
}
}
xmlrpc还是比较好用的,同样在其他语言中也有实现,但是在参数的传输方面比较弱这点需要注意,在android应用开发中同样也可以使用,使用方式和上面的完全一致。