cxf+spring+数字签名开发webservice(二)

  • 场景

        上一章中的webservice接口,因为现场正式环境的项目与外部单位网络不通,是通过前置机与外部进行数据交换,所以我们将webservice部署在前置机,在使用HttpURLConnection与正式服务器上进行数       据传递。这里可以使用的技术挺多的,如:java的rmi,Hessian,spring的HttpInvoker等,下面是使用HttpURLConnection的代码(实际情况是最后选择了spring的HttpInvoker):

  •  HttpURLConnection客户端调用方法 
 1 package http.rpc.util;
 2 
 3 import java.io.BufferedOutputStream;
 4 import java.io.ByteArrayOutputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.OutputStream;
 8 import java.io.OutputStreamWriter;
 9 import java.net.HttpURLConnection;
10 import java.net.MalformedURLException;
11 import java.net.URL;
12 import java.net.URLEncoder;
13 import java.util.Map;
14 
15 public class ClientUtils {
16   /*
17    * @param url    服务端url地址
18    * @param beanid 访问远程方法所在的类名
19    * @param method 调用服务端的方法名
20    * @param param  服务端的方法的参数
21    */
22     public static Object remoteService(String url, String beanid, String method, String param) {
23         HttpURLConnection urlcon = null;
24         String result = null;
25         try {
26             if (param == null) {
27                 param = "";
28             }
29             URL u = new URL(url + "/webservice.rpc");
30 
31             byte[] databuffer = new byte[1024];
32             ByteArrayOutputStream outStream = new ByteArrayOutputStream();
33             int len = 0;
34             try {
35                 urlcon = (HttpURLConnection) u.openConnection();
36                 urlcon.setDoOutput(true);
37                 urlcon.setRequestMethod("POST");
38                 OutputStream buf = new BufferedOutputStream(urlcon.getOutputStream());
39                 OutputStreamWriter out = new OutputStreamWriter(buf, "UTF-8");
40                 /* 向webservice.rpc传递3个参数 */
41                 out.write("serverid=" + beanid + "&method=" + method + param);
42                 out.flush();
43                 out.close();
44 
45                 urlcon.connect();
46                 if (urlcon.getResponseCode() == 200) {
47                     InputStream in = urlcon.getInputStream();
48                     while ((len = in.read(databuffer)) != -1) {
49                         outStream.write(databuffer, 0, len);
50                     }
51                     in.close();
52                     result = new String(outStream.toByteArray(), "utf-8");
53                     System.out.println(result);
54                     urlcon.disconnect();
55                 }
56             } catch (IOException e) {
57                 e.printStackTrace();
58             }
59         } catch (MalformedURLException e) {
60             e.printStackTrace();
61         }
62         urlcon.disconnect();
63         return result;
64     }
65 }
  • 服务端web.xml配置(简单的servlet配置)

 

1 <servlet-mapping>
2    <servlet-name>testserver</servlet-name>
3    <url-pattern>/webservice.rpc</url-pattern>
4 </servlet-mapping>
5   
6 <servlet>
7    <servlet-name>testserver</servlet-name>
8 <servlet-class>http.rpc.Server</servlet-class>

 

  • 服务端http请求类
 1 package http.rpc;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.ServletOutputStream;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 public class Server extends HttpServlet{
11 
12     @Override
13     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
14             throws ServletException, IOException {
15         System.out.println("doPost");
16         String serverid = req.getParameter("serverid").toString();
17         String method = req.getParameter("method").toString();
18         String methodParam = req.getParameter("param").toString();
19         ServletOutputStream sos = resp.getOutputStream();
20         String result = "远程调用返回";
21         sos.write(result.getBytes("utf-8"));
22     }
23 }
  • 最后说说

        Server类得到远程方法信息后,可以使用反射去调用具体方法。返回的数据如果是对象类型,可以实现序列化和反序列化进行数据传递。因为使用spring的HttpInvoker,就没写得很完善,这里只是做个记录,有时间再完善吧。

 

转载于:https://www.cnblogs.com/yuyuj/p/4526647.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值