网络编程四
一、网络编程之WebService
1.WebService
Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用
程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、
协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。
Web Service技术,能使得运行在不同机器上的不同应用无须借助附加的、专门
的第三方软件或硬件,就可相互交换数据或集成。依据WebService规范实施的应用之
间,无论它们所使用的语言、平台或内部协议是什么,都可以相互交换数据。
WebService是自描述、自包含的可用网络模块,可以执行具体的业务功能。
WebService也很容易部署,因为它们基于一些常规的产业标准以及已有的一些技术,
诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。
WebService为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
简单的说,WebService就是一种跨编程语言和跨操作系统平台的远程调用技术。所
谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他
编程语言编写,反之亦然。跨操作系统平台则是指服务端程序和客户端程序可以在不同的操
作系统上运行。 远程调用,就是一台计算机的应用可以调用其他计算机上的应用。
例如:支付宝,支付宝并没有银行卡等数据,它只是去调用银行提供的接口来获得数据。
还有天气预报等,也是气象局把自己的系统服务以webservice服务的形式暴露出来,让第三
方网站和程序可以调用这些服务功能。
简而言之,webService是连接不同项目之间的一个"纽带",遵循soap协议,通过解析
xml达到不同项目之间数据信息的交互的目的
2.WebService原理
XML,SOAP和WSDL就是构成WebService平台的三大技术 。
WebService采用Http协议来在客户端和服务端之间传输数据。WebService使用
XML来封装数据,XML主要的优点在于它是跨平台的。
WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用
XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的
HTTP消息头和XML内容格式就是SOAP协议规定的。
WebService服务器端首先要通过一个WSDL文件来说明自己有什么服务可以对外调用。
简单的说,WSDL就像是一个说明书,用于描述WebService及其方法、参数和返回值。WSDL
文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService
服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来
暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。
3.WSDL(Web Services Description Language):Web服务描述语言
是一种XML Application,他将Web服务描述定义为一组服务访问点,
客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务
进行访问(类似远程过程调用)。
WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,
然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。
相关的具体部署的服务访问点通过组合就成为抽象的Web服务。
简而言之:就是将服务端的功能(函数)通过xml描述出来,且标识出服务的地址,
然后供调用者使用
wsdl发布查询
4.在不同项目之间进行数据信息交互的方式
1).公众: WebService
简单,方便,工作量小,但安全性差点
2).保密: 报文():xml流/json流
安全,灵活,但工作量大
5.在客户端调用服务端的方式(WebService)
1).内部访问
xfire代理工厂 ps: 服务端开放接口 需要给相应的jar包
2).远程访问
通过wsdl回调服务端的函数
2.1). 直接通过url/wsdl来生成 2.2). 把wsdl下载下来到本地的classpath(比较麻烦,不推荐使用)
6.WebService传输复杂对象
ps: 需要将复杂对象包装下
即,用到的对象类必须实现Serializable,才能够传输.否则会找不到,对应的文件,
从服务器返回过来的数据为null,因为用到了List、Map等集合类型,所以需要定义
Mapping关系,文件名为:IPersonService.aegis.xml(这里以PersonService为例)
且此文件一定要放到与IPersonService.java相同的目录下面,否则会出错。
IPersonService.aegis.xml
Person.java
IPersonService.java
PersonServiceImpl.java