`
byf157
  • 浏览: 202547 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

Http Post Xml方式传递数据

    博客分类:
  • java
 
阅读更多
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();   
  
}  
分享到:
评论

相关推荐

    httpclient 客户端发送xml报文到服务器端采用post方式(加密)传递

    采用httpclient发送xml报文,httpServer接收报文。两个程序一看就明白可以直接调用执行不在多说。

    C#使用Http Post方式传递Json数据字符串调用Web Service

    主要为大家详细介绍了C#使用Http Post方式传递Json数据字符串调用Web Service,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    调用webservice,通过post传参读取返回的XML

    调用webservice接口,利用post方式传参数,将返回的XML结果,利用xmldocument返回到页面中。

    框架之AJAX,ajax,页面部分刷新,实现动态提交数据到服务器;动态从服务区获取数据 get,post两种传递数据方法,Jso

    ajax,页面部分刷新,实现动态提交数据到服务器;动态从服务区获取数据。get,post两种传递数据方法,Json、html、text、xml等多种数据格式。

    springboot后台接收axios传递的json数据为null

    后台接收到的数据一直显示null 原因: 使用@RequestBody标签接收json数据,参数类型不能用Sting 看这两个注解的作用 @RequestParam ...是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或

    往届师兄师姐面试真题收集(Java相关岗位)

    springmvc框架封装了原生mvc,视图层向业务层传递数据时需经过控制层。 4、单线程和多线程的区别 多线程即同时存在多个线程运行,比只有一个线程运行效率要高。多线程可能产生并发问题,可以使用同步技术加以控制...

    DWR.xml配置文件说明书(含源码)

    从java中传递null值到javascript是没有任何危险性的,所以DWR将这个作为默认的converter,所以你自己不用再把这个converter添加到配置文件的部分中去. 基本类型的converter转换int,boolean,double等.当然还包括对应的...

    HttpClient通过Post上传文件的实例代码

    在之前一段的项目中,使用Java模仿Http Post方式发送参数以及文件,单纯的传递参数或者文件可以使用URLConnection进行相应的处理。 但是项目中涉及到既要传递普通参数,也要传递多个文件(不是单纯的传递XML文件)。...

    老罗android视频开发源码和ppt经典

    1.7 意图传递数据的第一种方式 1.8 android使用静态变量传递数据 1.9 意图返回结果 二、Android常用布局介绍 2.1 android常用布局属性的介绍 2.2 android线性布局的介绍 2.3 android框架布局的使用 2.4 相对布局的...

    解决JS访问Rest的跨域问题和数据格式问题

    1、基于wcf框架对Rest架构的web服务实现; 2、支持javascript的多种方式跨域访问(GET/POST/PUT/DELETE); 3、解决服务调用参数传递的动态设计数据格式(Xml/Json);

    黎活明android教程的全程PPT

    3&gt; 如何把数据通过HTTP协议提交到网络上的Web应用(get / post ) 数据大于2k的时候 A.通过Get方式提交参数给Web应用 B.通过Post方式提交参数给Web应用 C.使用HttpClient开源项目提交参数给服务器 4&gt; 网络--通过...

    ios-酒店预订App.zip

    封装网络访问类AFNetPackage,具备检查网络状态、JSON方式获取数据、xml方式获取数据、post、get、delete、文件下载、文件上传等功能 UITableview上拉加载、下面刷新功能;UITableView潜逃UICollecionView展现界面,...

    Ajax课件学习(免费)

    4、当向send()方法提供参数时,要确保open()中指定的方法是POST,如果没有数据作为请求体的一部分发送,则使用null. 3.2.4.4setRequestHeader(header,value) 1、当浏览器向服务器请求页面时,它会伴随这个请求发送...

    传智播客Android视频教程-课程源码.rar

    3&gt; 如何把数据通过HTTP协议提交到网络上的Web应用(get / post ) 数据大于2k的时候 A.通过Get方式提交参数给Web应用 B.通过Post方式提交参数给Web应用 C.使用HttpClient开源项目提交参数给服务器 4&gt; 网络--通过...

    jQuery 使用手册(七)

     ((String)url:数据请求页面的url ((String)data:传递数据的参数字符串,只适合post方式 ((String)dataType:期待数据返回的数据格式(例如 “xml”, “html”, “script”,或 “json”) ((Boolean)ifModified

    Ajax 传递JSON实例代码

    本文将上一篇中的实例进行改写,以JSON的方式来进行数据传递 前端页面 &lt;!-- 前端页面 --&gt; &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Document&lt;...

    python 中英文翻译api request(百度)

    根据API的返回格式(如JSON或XML),使用相应的方法来解析API响应数据。 处理翻译结果: 提取翻译结果并进行进一步处理,根据需要进行格式化、保存或展示。 请注意,以上描述提供了一个基本的请

    PHP网络编程技术与实践 源码

    3.4.5 获取HTTP POST信息:$_POST 3.4.6 HTTP文件上传信息:$_FILES 3.4.7 REQUEST变量:$_REQUEST 3.4.8 系统Session信息:$_SESSION 3.4.9 GLOBALS变量:$GLOBALS 3.5 本章小结 第4章 PHP中的数据库编程 4.1 通过...

    jquery-1.1.3 效率提高800%

    '位于get请求中url的末尾或是post请求传递的数据中。因此设置 {jsonp:'onJsonPLoad'} 会将 'onJsonPLoad=?' 传送给服务器。 processData(true) 数据类型: Boolean 在默认的情况下,如果data选项传进的数据是...

Global site tag (gtag.js) - Google Analytics