HTTP 通讯 消息内容以 XML 的方式进行相互之间的通信 实例
2013-05-15 17:05
661 查看
一、概述
在不同的应用之间传递数据,可以通过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数据,然后获取服务端的响应并进行解析:自己写了个公共类BaseServletRequest.java 免得各个地方使用的时候还要又写一次,代码如下
[java] view
plaincopyprint?
public class BaseServletRequest
{
public static Document doTheProcess(String xmlString, String urlStr)
{
DataInputStream input = null;
java.io.ByteArrayOutputStream out = null;
try
{
byte[] xmlData = xmlString.getBytes();
// 获得到位置服务的链接
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));
return d;
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
out.close();
input.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
return null;
}
}
三、客户端的实现,调用了刚才公共类的处理 ClientDemo.java
[java] viewplaincopyprint?
public class ClientDemo
{
public static void main(String[] args)
{
String xmlString = "<?xml version='1.0' encoding='gb2312'?><Req><EventContentReq>"
+ "<EventID>101</EventID></EventContentReq></Req>";
String urlStr = "http://localhost:8080/Foster_Blog/HttpRequestDemo";
// 调用参数传递,返回一个document,要什么值再直接从中去取。
Document d = BaseServletRequest.doTheProcess(xmlString, urlStr);
String TaskAddr = d.getElementsByTagName("TaskAddr").item(0).getFirstChild().getNodeValue();
System.out.println("TaskAddr:" + TaskAddr);
}
}
四、服务器端代码
[java] viewplaincopyprint?
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException
{
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字符串(格式要正确。。)
String xmlString = "<Req>" + "<EventContentReq>"
+ "<TaskAddr> U should study.....</TaskAddr >" + "</EventContentReq>" + "</Req>";
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();
}
}
原文链接:/article/9545856.html
相关文章推荐
- HTTP 通信, 三种方式XML 解析,并通过 Hander 实现异步消息处理
- 不同VLAN之间相互通信的两种方式(方式二:三层交换)
- QT单实例应用,使用QLocalSocket进行进程通信,不同运行权限下运行的同一个进程通讯失败,报错 “QLocalSocket::SocketAccessError”
- 通过http/https的POST方式,发送、处理和接收XML文件内容
- android中Activity与service之间相互通信的实现方式
- Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递
- Hadoop中NameNode、DataNode和Client三者之间的通信方式是什么?怎样进行合作?
- Android 存储文件方式之一---SharedPreferences 内容提供者,以xml 的方式进行数据 存储。是一种轻量级的文件数据存储
- 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: GetLzdtArticleResult。InnerException 消息是“反序列化对象 属于类型 lzdt.DTO.Dtolzdt[] 时出现错误。读取 XML 数据时,超出最大
- 如何是使用XMLHttpRequest对象实现与服务器之间的通信
- XMLHttpRequest对象来和服务器进行通信
- PHP对XML内容进行修改和删除实例代码
- 客户端和应用服务器之间利用HttpClient和Servlet交互JSON对象进行通信
- php实现xml与json之间的相互转换功能实例
- ZeroMQ实例-使用ZeroMQ进行windows与linux之间的通信
- web.xml 中的Filter 之间是怎么进行通信的
- DOM方式进行的XML文件、Document、String之间的相互转换
- 不同VLAN之间相互通信的两种方式(单臂路由、三层交换)
- ASP.NET通过http/https的POST方式,发送和接受XML文件内容
- 通过http/https的POST方式,发送和接受XML文件内容