java中xmlrpc的使用

    我们在提供远程接口时可以使用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应用开发中同样也可以使用,使用方式和上面的完全一致。

猜你喜欢

转载自zxs19861202.iteye.com/blog/1187512