一、什么是Web Service ?

Web Services 是有企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过internet来访问并使用这项在线服务
WebServicce的主要目标是跨平台的可互操作性。为了达到这一目标,WebService完全基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台
二、关键的技术和规则
1、WebService时,主要用到以下几个关键的技术和规则:
a、XML:描述数据的标准方法
b、SOAP:表示信息交换的协议(Simple Object Access Protocol)

二、 xml的数据交换

要了解xml数据交换,首先我们要了解什么是数据交换。
1、什么是数据交换
数据交换是指为了满足不同信息系统之间数据资源的共享需要,依据一定的原则,采取相应的技术,实现不同信息系统之间数据资源共享的过程。

客户端与服务器常用数据交换格式xml、json、html

2、数据交换格式应用场景
移动端(安卓、IOS)通讯方式采用http协议+JSON格式走restful风格。
很多互联网项目都采用Http协议+JSON
因为xml比较重WebService服务采用http+xml格式银行项目使用比较多

我们先以一张图来初步了解我们的xml数据传输:
如图所示:

首先我们来一步步解析它们各自的作用:
1.服务器端
服务器端组件主要完成以下三个功能:
第一:网络监听功能
当接收到客户端传来的请求时,会触发一个监听事件,在这一事件的处理代码中得到客户端的查询请求,然后执行数据库操作

第二:查询数据库功能
得到客户端的请求内容,在进入所在的数据库里查询到客户端所需要的内容,一般是把查询结果放进一个Map集合当中

第三:将查询结果封装成xml文件格式发送给客户端
为了把map集合转换成xml格式的文件,我们需要用到以下代码实例:
代码如下:

/** * map转xml * @param map * @param body xml元素 * @return */  private static Element map2xml(Map<String, Object> map, Element body) {  Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator();  while (entries.hasNext()) {  Map.Entry<String, Object> entry = entries.next();  String key = entry.getKey();  Object value = entry.getValue();  if(key.startsWith("@")){    //属性  body.addAttribute(key.substring(1, key.length()), value.toString());  } else if(key.equals("#text")){ //有属性时的文本  body.setText(value.toString());  } else {  if(value instanceof java.util.List ){  List list = (List)value;  Object obj;  for(int i=0; i<list.size(); i++){  obj = list.get(i);  //list里是map或String,不会存在list里直接是list的,  if(obj instanceof java.util.Map){  Element subElement = body.addElement(key);  map2xml((Map)list.get(i), subElement);  } else {  body.addElement(key).setText((String)list.get(i));  }  }  } else if(value instanceof java.util.Map ){  Element subElement = body.addElement(key);  map2xml((Map)value, subElement);  } else {  body.addElement(key).setText(value.toString());  }  }  //System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());  }  return body;  }

2.客户端
客户端的组件主要完成以下三个方面的工作:
第一:与服务器端建立连接
通过服务器端的监听程序建立连接

第二:发送查询请求
用户在客户端发出查询请求,通过建立的连接把请求发送到服务器端

第三:接收服务器端返回的xml文件,一般都是把它转换为Map集合的形式,并从中提取出所需的各项数据
为了把xml格式的文件转换成map集合,我们需要用到以下代码实例:
代码如下:

将XML文档转换为Map集合,方式也比较多,下面这种方式是DOM4J的方式:Map<String, String> map=new HashMap<String,String>();
try {
InputStream is = new FileInputStream(new File("config.xml"));SAXReader sax=new SAXReader(); //创建解析器Document doc=sax.read(is); //创建对应的Document对象Element root=doc.getRootElement(); //获取XML文档的根节点对象List<Element> list = root.elements();
//获取根节点下的所有的子节点
for (Element ele : list) { //遍历根节点下的所有子节点并将其放入MAP对象中map.put(ele.getName(), ele.getText());
}is.close();} catch (Exception e) {
e.printStackTrace();
}

如果对xml数据传输还有什么疑问,我们不妨通过我们身边具体的实例来理解:

假设我们有一个婚恋网站,用户向我们提出了一个查询要求,但他需要这些人的个人房产信息,个人车辆信息,个人资产情况,可我们网站只有最基本的个人信息,没有很详细的数据,这个时候我们就要向我们的派出所取得详细的信息。
我们通过画图来帮助我们理解这个过程
如图所示:


我相信通过这个事例我们就可以对xml数据传输可以有更进一步的了解。

xml和json数据交换的比较

数据传输不只有xml数据传输,还有json数据传输,而且json数据传输在使用范围上已经超过了xml数据传输
接下来让我们了解一下xml和json数据交换的比较,看看它们各自的优缺点:

JSON(Javascript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavascriptProgramming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++,C#, Java, Javascript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
JSON概念很简单,就是服务器直接生成Javascript语句,客户端获取后直接用eval方法来获得这个对象,这样就可以省去解析XML的性损失。
常用的JSON解析框架:
fastjson(阿里)、gson(谷歌)、jackson(SpringMVC自带)

如要从后台载入信息,写成XML,如下:

<contact>
<friend>
<name>Michael</name>
<email>17bity@gmail.com</email>
<homepage>http://www.jialing.net</homepage>
</friend>
<friend>
<name>John</name>
<email>john@gmail.com</email>
<homepage>http://www.john.com</homepage>
</friend>
<friend>
<name>Peggy</name>
<email>peggy@gmail.com</email>
<homepage>http://www.peggy.com</homepage>
</friend>
</contact>

而写成JSON:

[
{
name:"Michael",
email:"17bity@gmail.com",
homepage:"http://www.jialing.net"
},
{
name:"John",
email:"john@gmail.com",
homepage:"http://www.jobn.com"
},
{
name:"Peggy",
email:"peggy@gmail.com",
homepage:"http://www.peggy.com"
}
]

注意:{}包裹的是一个对象 JSONObject []包裹的是一个数据JSONArray

简单的不只是表达上,最重要的是可以丢弃让人晕头转向的DOM解析了。因为只要符合Javascript的声明规范,JavaScrip会自动帮你解析好 的。Ajax中使用JSON的基本方法是前台载入后台声明Javascript对象的字符串,用eval方法来将它转为实际的对象,最后通过 DHTML更新页面信息。

JSON不仅减少了解析XML解析带来的性能问题和兼容性问题,而且对于Javascript来说非常容易使用,可以方便的通过遍历数组以及访问对象属性 来获取数据,其可读性也不错,基本具备了结构化数据的性质。不得不说是一个很好的办法,而且事实上google maps就没有采用XML传递数据,而是采用了JSON方案。

JSON的另外一个优势是"跨域性",例如你在www.Web.cn的网页里使用

JSON的定义
一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。

XML的定义
扩展标记语言 (Extensible Markup Language,XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

[ XML ]
使 用XML作为传输格式的优势:

  1. 格式统一, 符合标准
  2. 容易与其他系统进行远程交互, 数据共享比较方便

缺点:

  1. XML文件格式文件庞大, 格式复杂, 传输占用带宽
  2. 服务器端和客户端都需要花费大量代码来解析XML, 不论服务器端和客户端代码变的异常复杂和不容易维护
  3. 客户端不同浏览器之间解析XML的方式不一致, 需要重复编写很多代码
  4. 服务器端和客户端解析XML花费资源和时间

[ JSON ]
优点:

  1. 数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小
  2. 易于解析这种语言, 客户端JavaScript可以简单的通过eval_r()进行JSON数据的读取
  3. 支持多种语言, 包括ActionScript, C, C#, ColdFusion, Java,JavaScript, Perl, PHP, Python, Ruby等语言服务器端语言, 便于服务器端的解析
  4. 在PHP世界, 已经有PHP-JSON和JSON-PHP出现了, 便于PHP序列化后的程序直接调用. PHP服务器端的对象、数组等能够直接生JSON格式, 便于客户端的访问提取.
  5. 因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 但是完成的任务不变, 且易于维护

缺点:

  1. 没有XML格式这么推广的深入人心和使用广泛, 没有XML那么通用性
  2. JSON格式目前在Web Service中推广还属于初级阶段

JSON 和 XML 优缺点的比较

  1. 在可读性方面,JSON和XML的数据可读性基本相同。JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。

  2. 在可扩展性方面,XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,而JSON不能的。

  3. 在编码难度方面,XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。

  4. 在解码难度方面,XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。

  5. 在流行度方面,XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(AsynchronousJavascript and JSON)了。

  6. JSON和XML同样拥有丰富的解析手段。

  7. JSON相对于XML来讲,数据的体积小。

  8. JSON与JavaScript的交互更加方便。

  9. JSON对数据的描述性比XML要差。

  10. JSON的速度要远远快于XML。

实际上,对于大多数web应用来说,他们根本不需要复杂的XML来传输数据,XML宣称的扩展性在此就很少具有优势;许多Ajax应用甚至直接返回HTML片段来构建动态web页面。和返回XML并解析它相比,返回HTML片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。同XML或 HTML片段相比,数据交换格式JSON 提供了更好的简单性和灵活性。在web serivice应用中,至少就目前来说XML仍有不可动摇的地位

谢谢观看,多多指教!

xml的数据交换以及xml和json数据交换的比较相关推荐

  1. php音频转换接口,PHP实现chrome表单请求数据转换为接口使用的json数据

    为什么要写转换程序 最近在做旧版程序迁移,旧的架构为常规的MVC模式,新版架构全部改成restful架构. 由于改版数据是一致的,但是请求结构不一致,新版的请求全部以json形式提交,为了方便测试,之 ...

  2. js html 处理json数据,JS中Json数据的处理和解析JSON数据的方法详解

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...

  3. ajax如何传递josn数据,jq之ajax以及json数据传递

    闭包演示 function transfer(){ var dat = $( "#sel" ).val(); //console.log(dat) $.ajax({ type:&q ...

  4. ajax写入json数据格式化,java ajax解析json数据格式化

    java ajax解析json数据格式化 [2021-02-01 23:35:58]  简介: 服务器 hadoop格式化HDFS出现错误解决办法 报错信息: host:java.net.Unknow ...

  5. JS中Json数据的处理和解析JSON数据的方法详解

    学习目标: 节数 知识点 要求 第一节 数组去重 数组去重 了解 第二节 数组排序 数组排序 了解 第三节 json概述 json概述 掌握 第四节 json方法 json方法 掌握 第五节 json ...

  6. php 读取 js json格式数据,js读取和解析JSON数据的方法

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  7. gson解析mysql城市json数据_Gson解析复杂的json数据

    首先我们需要定义一个序列化的Bean,这里采用内部类的形式,看起来会比较清晰一些: 1 public classJsonBean {2 publicString a;3 public Listb;4 ...

  8. Cesium加载GeoJson数据(shp转化的json数据)

    1.shp转换成json格式 此处整理了两种shp转为json格式的方式:一是使用工具:二是使用ArcGIS进行转换. 1.1.ArcGIS转换 1.使用ArcGIS将shp文件的地理坐标设置为WGS ...

  9. 解决springmvc返回json数据IE出现文件下载和json数据中文乱码问题

    总结一下使用springmvc时经常会遇到的一个问题. springmvc返回json数据在IE浏览器中访问,会出现文件下载现象,这是因为IE10以下不支持application/json格式的Res ...

  10. html页面加载json数据,在html中显示JSON数据的方法

    背景: 有时候我们需要将json数据直接显示在页面上(比如在做一个接口测试的项目,需要将接口返回的结果直接展示),但是如果直接显示字符串,不方便查看.需要格式化一下. 解决方案: 其实JSON.str ...

最新文章

  1. 独家|OpenCV 1.2 如何用OpenCV扫描图像、查找表和测量时间(附链接)
  2. SAP WM LT10事务代码的一个坑?
  3. openfire单个插件编译
  4. angularJS 修改操作select回显选中的数据
  5. c ++atoi函数_atoi()函数以及C ++中的示例
  6. 七张图了解Kubernetes内部的架构
  7. 配置一下自己的vim
  8. Executors 线程池的7个参数详解
  9. Python将字符串转换为浮点数
  10. git切换分支出现head is now at_git寻根——^和~的区别
  11. 操作系统学习笔记(一) 进程与线程模型
  12. atitit.attilax.com产品 软件项目通用框架类库总结
  13. Visual Studio 2017入门教程丨如何运行一个Fortran程序
  14. 你所不知道的我国交通工程早期经历了怎样的发展?
  15. 【有利可图网】PS实战系列:PS+SAI把照片制成唯美手绘效果
  16. 渡一教育公开课web前端开发JavaScript精英课学习笔记(二十九)JavaScript 骇客帝国
  17. Locust简单使用
  18. 05-ubuntu安装mysql8
  19. 各大媒体优劣对比_户外广告媒体类型与优缺点对比分析
  20. 王元元主编书籍计算机数学基础,计算机数学基础 - 王朝网络 - tc.wangchao.net.cn

热门文章

  1. php mcrypt extension,php mcrypt extension使用教程
  2. 我对计算机类专业教学中一些问题的看法
  3. 【TSP问题】基于变邻域搜索算法VNS求解旅行商问题附matlab代码
  4. iframe 实现内部页面返回上一级
  5. python fixture_使用Fixture
  6. 火狐浏览器账户登陆不了的问题
  7. oracle GoldenGate 的参数配置
  8. web框架和库_15个有用的Web印刷工具,库和框架
  9. FedDG:在连续频率空间中通过情景学习进行医学图像分割的联合域泛化
  10. indexes与indices区别