一、概述
在不同的应用之间传递数据,可以通过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数据,然后获取服务端的响应并进行解析:
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("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数据,进行解析,并将响应返回给客户端:
try{
//解析对方发来的xml数据,获得EventID节点的值
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse(request.getInputStream());
String evtid = d.getElementsByTagName("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();
}
分享到:
相关推荐
java http-post xml格式客户端请求代码
基于C++的http的post发送接收数据以及xml解析:用winInet来实现http的post请求接收数据,解析xml的数据
HTTP Post XML方法
NULL 博文链接:https://waynett.iteye.com/blog/1129581
http的post发送接收数据以及xml解析:用winInet来实现http的post请求接收数据,解析xml的数据
用于进行POST XML到指定URL的小程序,基于.NET Framework 3.5,方便Web程序员调试。
java实现 http post xml
java http 发送xml报文(java发送xml报文实例+参数)java http 发送xml报文java http 发送xml报文(java发送xml报文实例+参数)
在JAVA中如何用SERVLET处理Http Post的表单请求xml
xml报文处理
XML Post 工具_XMLTransmitter.zip
发送Post请求,内容格式为xml,并获取响应内容
调用webservice接口,利用post方式传参数,将返回的XML结果,利用xmldocument返回到页面中。
用友NC凭证导入XML中文说明 <?xml version="1.0" encoding='UTF-8'?> <voucher_head>
响应包含关于请求的状态信息以及可能被请求的内容。 两种 HTTP 请求方法:GET 和 POST 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。 GET - 从指定的资源请求数据。 POST - 向指定...
1、解决asp.net post xml 返回"远程服务器返回错误: (500) 内部服务器错误" 2、解决提供web服务端,对方xml post请求出现500错误
微信公众平台开发人员POSTXML助手,直接在电脑上发送微信数据,这样就可以不用在手机上反复操作了
软件运行在Windows 平台,测试了windows 10 x64 位平台。 1、将本软件解压到文件夹 ...1、实现POST、GET功能:POST 实现xml,json, url-encode 格式的数据提交 2、可以将输入内容保存或读取,以便使用 3、可以自定义头
采用httpclient发送xml报文,httpServer接收报文。两个程序一看就明白可以直接调用执行不在多说。