Http Post Xml (Post docment)

一、概述

在不同的应用之间传递数据,可以通过web service的方法,同时还可以通过Http Post Xml的方法,相比而言,通过web service传递数据灵活,但是配置起来较为麻烦,涉及到新知识的学习,而通过Http Post Xml传递数据,不需要涉及新的知识,但是灵活性稍差,需要客户端和服务端事先约定好xml数据的结构。

Http Post Xml方式传递数据在跟移动、联通等电信运营商之间合作时,经常会用到,一般涉及到下面的知识点:

Ø         Java网络编程(java.net包)

Ø         Java IO编程(java.io包)

Ø         文档对象模型(DOM)

Ø         Java解析xml(javax.xml.parsers包)

二、客户端代码

通过Http Post Xml传递数据,客户端一般是通过URL建立到服务端的连接,向服务端发送xml数据,然后获取服务端的响应并进行解析:

Java代码 
  1. String xmlString = "<?xml version='1.0' encoding='gb2312'?>"  
  2.                      + "<Req>"  
  3.                      + "<EventContentReq>"  
  4.                      + "<EventID>101</EventID >"  
  5.                      + "</EventContentReq>"  
  6.                      + "</Req>";  
  7.   
  8. byte[] xmlData = xmlString.getBytes();  
  9.   
  10. String urlStr = "http://124.128.62.164:7001/FetchTaskDataServlet";  
  11.   
  12. DataInputStream input = null;  
  13.   
  14. java.io.ByteArrayOutputStream out = null;  
  15.   
  16. try{  
  17.   
  18.        //获得到位置服务的链接  
  19.   
  20.        URL url = new URL(urlStr);  
  21.   
  22.        URLConnection urlCon = url.openConnection();  
  23.   
  24.        urlCon.setDoOutput(true);  
  25.   
  26.        urlCon.setDoInput(true);  
  27.   
  28.        urlCon.setUseCaches(false);  
  29.   
  30.        //将xml数据发送到位置服务  
  31.   
  32.        urlCon.setRequestProperty("Content-Type""text/xml");  
  33.   
  34.        urlCon.setRequestProperty("Content-length",String.valueOf(xmlData.length));  
  35.   
  36.        DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream());  
  37.   
  38.        printout.write(xmlData);  
  39.   
  40.        printout.flush();  
  41.   
  42.        printout.close();  
  43.   
  44.        input = new DataInputStream(urlCon.getInputStream());  
  45.   
  46.        byte[] rResult;  
  47.   
  48.        out = new java.io.ByteArrayOutputStream();  
  49.   
  50.        byte[] bufferByte = new byte[256];  
  51.   
  52.        int l = -1;  
  53.   
  54.        int downloadSize = 0;  
  55.   
  56.        while ((l = input.read(bufferByte)) > -1) {  
  57.   
  58.            downloadSize += l;  
  59.   
  60.            out.write(bufferByte, 0, l);  
  61.   
  62.            out.flush();  
  63.   
  64.        }  
  65.   
  66.        rResult = out.toByteArray();  
  67.   
  68.        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  69.   
  70.        DocumentBuilder db = dbf.newDocumentBuilder();  
  71.   
  72.        Document d = db.parse(new ByteArrayInputStream(rResult));  
  73.   
  74.        String TaskAddr = d.getElementsByTagName("TaskAddr").item(0).getFirstChild().getNodeValue();  
  75.   
  76.        System.out.println("TaskAddr:"+TaskAddr);  
  77.   
  78. }  
  79.   
  80. catch(Exception e){  
  81.   
  82.        e.printStackTrace();  
  83.   
  84. }  
  85.   
  86. finally {  
  87.   
  88.        try {  
  89.   
  90.               out.close();  
  91.   
  92.               input.close();  
  93.   
  94.        }  
  95.   
  96.        catch (Exception ex) {  
  97.   
  98.        }  
  99.   
  100. }  

 三、服务端代码

服务端一般首先获取客户端发来的xml数据,进行解析,并将响应返回给客户端:

Java代码 
  1. try{  
  2.   
  3. //解析对方发来的xml数据,获得EventID节点的值  
  4.   
  5.        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  6.   
  7.        DocumentBuilder db = dbf.newDocumentBuilder();  
  8.   
  9.        Document d = db.parse(request.getInputStream());  
  10.   
  11.        String evtid = d.getElementsByTagName("EventID").item(0).getFirstChild().getNodeValue();  
  12.   
  13. //                   System.out.println("evtid" + evtid);  
  14.   
  15.        //根据evtid查找任务,生成xml字符串  
  16.   
  17.        UfgovDBUtil dbUtil = new UfgovDBUtil();  
  18.   
  19.        String xmlString = dbUtil.fetchTaskData(evtid);  
  20.   
  21. //                   System.out.println("returned xmlString:" + xmlString);  
  22.   
  23.        //把xml字符串写入响应  
  24.   
  25.        byte[] xmlData = xmlString.getBytes();  
  26.   
  27.        response.setContentType("text/xml");  
  28.   
  29.        response.setContentLength(xmlData.length);  
  30.   
  31.        ServletOutputStream os = response.getOutputStream();  
  32.   
  33.        os.write(xmlData);  
  34.   
  35.        os.flush();  
  36.   
  37.        os.close();  
  38.   
  39. }  
  40.   
  41. catch(Exception e){  
  42.   
  43.        e.printStackTrace();  
  44.   
  45. }  

转载于:https://www.cnblogs.com/yecllsl/archive/2010/06/30/1768382.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值