基础概念.
? Web
Service(Web服务)独立于程序运行,开发平台;业务服务组件松耦合,可扩展的web应用程序.
? WebService使用
XML标准来描述组件规范,发布业务组件以及
服务端,客户端的协调交互.
? WebService是分布式应用程序的实现方式之一.
? 所谓的分布式应用,就是在服务端将服务程序以组件形式分散部署在不同的网络节点,并通过网络对外提供一致的功能,简单的说,就是把我们写的计算器程序脱离web应用,独立部署在另外的服务器上并对外提供服务
接口,这样,无论是何种平台类型的客户端,都可以调用这个业务功能,同时,也降低了web
应用服务器的计算负担.
应用特点
从两个方面看:
1. 富客户端(
QQ)程序在大型的网络环境下和服务端交互需要更高的开发成本,浏览器端(BS)
架构下,又只能提供较为简单的用户体验.
2. 多数
商业应用程序,是基于具体的一类开发技术实现的,带来的使用瓶颈就是
跨平台服务支持,以及重用.
一个解决方案就是 :
客户端 >>>> webService标准 >>>>> 服务端
这样,客户端和服务端是隔离的,得到平台无关特性.
应用场景
1. 通过GOOGLE的搜索引擎调用地区天气服务查询.
2. 银联ATM,每家
银行的系统实现不可能都是JAVA吧
3. 各地股票交易查询系统
4. 大集团子系统整合.
5. …… 核心,就是通过WS来实现应用分布,以及客户/服务平台无关
关键技术支持
? XML/XSD : 表示交互数据的格式;
? SOAP : 简单对象访问
协议,可以和通用的网络协议
结合,比如
HTTP和邮件传输协议SMTP,如同它的名字,它定制了一套标准的方法来访问并使用部署在网络中不同节点环境下的分布式对象数据,是通过使用基于XML的数据结构描述和HTTP的组合来完成的;
因此可以简单的
理解为: SOAP = HTTP+XML
a) 客户端通过服务代理对象来发出申请,如果参数是对象,
序列化为XML
b) 服务端接收请求并处理,如果有数据交互,序列化为XML
c) XML扮演的角色类似java的序列化机制,保证webservice对接的双方能够准确的交互数据.
? WSDL: Web Services Description Language,
网络服务描述语言,它是一个XML的子集语言,用来描述服务端提供的Web服务,以及客户端如何与它们通信的接口定义语言;
描述服务细节信息的WSDL文件将被存放在服务器端,客户端通过URI地址就可以找到它了,以下是相关元素标签
? Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML
Schema中的类型系统)。
? Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构,对于java服务提供方,就是通过消息来映射方法的参数(输入)和返回值(输出)
?
Operation - 对服务中所支持的操作的抽象描述(也就是映射服务的方法),一般单个Operation描述了一个访问入口的请求(入参)/响应(返回值)消息对
? PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点(就是我们写的service类)来支持。
? Binding - 特定端口类型的具体协议和数据格式规范的绑定,即soap的协议在此定制
? Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点,声明地址为URL形式找到服务提供者
? Service - 相关服务访问点的集合,作为对外服务提供窗口
1) 服务端基于WebService标准发布对外公开web服务接口,以一个特殊的XML>> WSDL来描述接口信息,WSDL要说明
远程服务提供了哪个对象的什么方法,传递的参数是什么,服务返回的结果又是什么…..
2) 客户端程序通过访问服务端的WSDL内容,构建访问程序.
3) 客户端通过服务代理对象,向服务端发送请求,使用协议就是SOAP
4) 服务端组件
解析SOAP协议
请求数据,调用对应的服务程序完成计算并将响应数据同样通过SOAP协议格式返回
5) SOAP协议和HTTP协议的联系,引用下前辈的解释:
“SOAP是基于HTTP协议的,二者的关系就好比高速公路是基于普通公路改造的,在一条普通公路加隔离栏,服务区,照相机,
摄像头,收费站….后,就成了高速公路”
------- 张孝祥
基于jdk6
注解配置的webService开发
服务端:
? 编写服务程序HelloService,无需实现接口,在服务类上以@WebService声明.
? 默认所有方法为服务方法,如需指定方法对外提供服务,对该方法使用@WebMethod声明.
? 发布webService,编写发布程序,在main方法中执行:
? Endpoint.publish("http://localhost:10086/HelloService", new HelloService());
? 如果发布成功,可以通过浏览器访问对应服务的描述文件,比如: http://localhost:10086/HelloService?wsdl
客户端方面 :
? 客户端通过命令wsimport 生成指定的服务代理
? wsimport -s . http://localhost:10086/helloService?wsdl
? -s 代表生成源文件,否则只有
class, . 代表当前路径.
? 通过实例化生成的服务代理对象来创建服务代理对象,调用代理方法,完成调用,代理类名称默认为WS服务类+Service.`