Http Post Xml形式传递数据

http://www.myexception.cn/operating-system/730657.html

Http Post Xml方式传递数据
Http Post Xml方式传递数据
一、概述

在不同的应用之间传递数据,可以通过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代码 
String xmlString = "<?xml version='1.0' encoding='gb2312'?>"   
                     + "<Req>"   
                     + "<EventContentReq>"   
                     + "<EventID>101</EventID >"   
                     + "</EventContentReq>"   
                     + "</Req>";    
   
byte[] xmlData = xmlString.getBytes();    
   
String urlStr = "http://124.128.62.164:7001/FetchTaskDataServlet";    
   
DataInputStream input = null;    
   
java.io.ByteArrayOutputStream out = null;    
   
try{    
   
       //获得到位置服务的链接    
   
       URL url = new URL(urlStr);    
   
       URLConnection urlCon = url.openConnection();    
   
       urlCon.setDoOutput(true);    
   
       urlCon.setDoInput(true);    
   
       urlCon.setUseCaches(false);    
   
       //将xml数据发送到位置服务    
   
       urlCon.setRequestProperty("Content-Type", "text/xml");    
   
       urlCon.setRequestProperty("Content-length",String.valueOf(xmlData.length));    
   
       DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream());    
   
       printout.write(xmlData);    
   
       printout.flush();    
   
       printout.close();    
   
       input = new DataInputStream(urlCon.getInputStream());    
   
       byte[] rResult;    
   
       out = new java.io.ByteArrayOutputStream();    
   
       byte[] bufferByte = new byte[256];    
   
       int l = -1;    
   
       int downloadSize = 0;    
   
       while ((l = input.read(bufferByte)) > -1) {    
   
           downloadSize += l;    
   
           out.write(bufferByte, 0, l);    
   
           out.flush();    
   
       }    
   
       rResult = out.toByteArray();    
   
       DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();    
   
       DocumentBuilder db = dbf.newDocumentBuilder();    
   
       Document d = db.parse(new ByteArrayInputStream(rResult));    
   
       String TaskAddr = d.getElementsByTagName_r("TaskAddr").item(0).getFirstChild().getNodeValue();    
   
       System.out.println("TaskAddr:"+TaskAddr);    
   
}    
   
catch(Exception e){    
   
       e.printStackTrace();    
   
}    
   
finally {    
   
       try {    
   
              out.close();    
   
              input.close();    
   
       }    
   
       catch (Exception ex) {    
   
       }    
   
}   
String xmlString = "<?xml version='1.0' encoding='gb2312'?>" + "<Req>" + "<EventContentReq>" + "<EventID>101</EventID >" + "</EventContentReq>" + "</Req>"; byte[] xmlData = xmlString.getBytes(); String urlStr = "http://124.128.62.164:7001/FetchTaskDataServlet"; DataInputStream input = null; java.io.ByteArrayOutputStream out = null; try{ //获得到位置服务的链接 URL url = new URL(urlStr); URLConnection urlCon = url.openConnection(); urlCon.setDoOutput(true); urlCon.setDoInput(true); urlCon.setUseCaches(false); //将xml数据发送到位置服务 urlCon.setRequestProperty("Content-Type", "text/xml"); urlCon.setRequestProperty("Content-length",String.valueOf(xmlData.length)); DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream()); printout.write(xmlData); printout.flush(); printout.close(); input = new DataInputStream(urlCon.getInputStream()); byte[] rResult; out = new java.io.ByteArrayOutputStream(); byte[] bufferByte = new byte[256]; int l = -1; int downloadSize = 0; while ((l = input.read(bufferByte)) > -1) { downloadSize += l; out.write(bufferByte, 0, l); out.flush(); } rResult = out.toByteArray(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document d = db.parse(new ByteArrayInputStream(rResult)); String TaskAddr = d.getElementsByTagName_r("TaskAddr").item(0).getFirstChild().getNodeValue(); System.out.println("TaskAddr:"+TaskAddr); } catch(Exception e){ e.printStackTrace(); } finally { try { out.close(); input.close(); } catch (Exception ex) { } }
三、服务端代码

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

Java代码 
try{    
   
//解析对方发来的xml数据,获得EventID节点的值    
   
       DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();    
   
       DocumentBuilder db = dbf.newDocumentBuilder();    
   
       Document d = db.parse(request.getInputStream());    
   
       String evtid = d.getElementsByTagName_r("EventID").item(0).getFirstChild().getNodeValue();    
   
//                   System.out.println("evtid" + evtid);    
   
       //根据evtid查找任务,生成xml字符串    
   
       UfgovDBUtil dbUtil = new UfgovDBUtil();    
   
       String xmlString = dbUtil.fetchTaskData(evtid);    
   
//                   System.out.println("returned xmlString:" + xmlString);    
   
       //把xml字符串写入响应    
   
       byte[] xmlData = xmlString.getBytes();    
   
       response.setContentType("text/xml");    
   
       response.setContentLength(xmlData.length);    
   
       ServletOutputStream os = response.getOutputStream();    
   
       os.write(xmlData);    
   
       os.flush();    
   
       os.close();    
   
}    
   
catch(Exception e){    
   
       e.printStackTrace();    
   
}   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值