一、webservice介绍
1. webservice 也叫作web服务。是java1.5以后推出的 。跨平台跨语言的远程调用技术。
客户端与服务端项目之间的交互、数据传递。
2. webservice技术,客户端与服务端进行通讯使用的协议是soap协议。(如果是基于restful风格的webservice,使用http协议。)
3. soap协议使用wsdl说明书作为服务端接口的描述文档(地址)
二、webservice的三要素
1. SOAP
- SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML(标准通用标记语言下的一个子集)编码信息的轻量级协议。它有三个主要方面:XML-envelope为描述信息内容和如何处理内容定义了框架,将程序对象编码成为XML对象的规则,执行远程过程调用(RPC)的约定。SOAP可以运行在任何其他传输协议上。SOAP作为一个基于XML语言的协议用于有网上传输数据。
- SOAP = 在HTTP的基础上+XML数据。 SOAP是基于HTTP的。
- SOAP的组成如下
- Envelope – 必须的部分。以XML的根元素出现。
- Headers – 可选的。
- Body – 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。
2. WSDL
wsdl说明书,可以描述服务端接口。(wsdl说明书,是一个xml文档。)
Web Service描述语言WSDL(web Service Definition Language)就是用机器能阅读的方式提供的一个正式描述文档而基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web Service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。
wsdl说明书:
a: 通过wsdl说明书,就可以描述webservice服务端对外发布的服务;
b: wsdl说明书是一个基于xml文件,通过xml语言描述整个服务;
c: 在wsdl说明中,描述了:
对外发布的服务名称、
对外发布的服务接口(portType)、
服务接口参数、
服务返回的数据类型(字符串、对象)
发布一个简单Web Service服务,并提供对外的wsdl文档的话;需要做哪些步骤呢?
步骤1: 写一个服务类,在类上添加@WebService注解
步骤2: 发布服务:EndPoint.publish(….)
步骤3: 访问wsdl说明书
3. 开发规范(UDDI)
a: jaxws 传统的webservice开发 (基于soap协议,只能传输xml数据) —— 开发简单,高度封装实现细节
(JAX-WS(Java API for XML Web Services)规范是一组XML Web Services的JAVA API;也即JDK内置的Web Service实现,用来开发和发布Web Service服务。)
b: jaxrs 基于restful风格的webservice的开发规范,基于http协议的应用开发,传输xml+json,更高效。比较流行。
三、webservice的优缺点
优点:
a:实现异构平台的互通性
理论上, Web Service 最大的优势是提供了异构平台的无缝街接技术手段。由于不同的用户使用不同的硬件平台,不同的操作平台,不同的操作系统,不同的软件,不同的协议通信,这就产生了互相通信的需求。 Web Service 使任何两个应用程序,只要能读写XML,那么就能互相通信。
b:更广泛的软件复用(例如手机淘宝可以复用已有淘宝的业务逻辑.)
软件的复用技术通过组合已有模块来搭建应用程序,能大幅度提高软件的生产效率和质量。用户只要获得了描述 Web Service 的 WSDL 文件,就可以方便地生成客户端代理,并通过代理访问 Web Service 。
c:成本低、可读性强、应用范围广
Web Service 可用基于 XML 的 SOAP 来表示数据和调用请求。并且通过 HTTP 协议传输 XML 格式的数据。 使用webservice实现基于服务的架构。(SOA)
d:迅捷的软件发行方式
(每个web Service称为一个生产者.不同的生产者可以相互协同合作完成整个应用)
Web Service 将彻底地改变软件的发行方式。 软件供应商可以把软件分解成若干Web Service 模块构成的系统,直接在 Web 上发布。
缺点:
由于soap是基于xml传输,本身使用xml传输会传输一些无关内容从而影响效率,随着soap协议的完善,soap协议增加了许多内容,这样就导致了使用soap去完成简单的数据传输而携带的信息更多效率再受影响;
四、应用场景
Web Service 可以适用于应用程序集成、软件重用、跨防火墙通信等需求。不同的业务要求不同。具体如下:
适合使用Web Service情形:
a:公开接口
b:调用webservice服务端
不适合使用Web Service情形
a:单机程序间通信
b :同构程序间通信
五、@WebService注解
@WebService
1、serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service。缺省值为 Java 类的简单名称 + Service。(字符串)
2、endpointInterface: 服务接口全路径, 指定做SEI(Service EndPoint Interface)服务端点接口
3、name:此属性的值包含XML Web Service的名称。在默认情况下,该值是实现XML Web Service的类的名称,wsdl:portType 的名称。缺省值为 Java 类或接口的非限定名称。(字符串
4、portName: wsdl:portName。缺省值为 WebService.name+Port。
5、targetNamespace:指定你想要的名称空间,认是使用接口实现类的包名的反缀
6、wsdlLocation:指定用于定义 Web Service 的 WSDL 文档的 Web 地址。Web 地址可以是相对路径或绝对路径。(字符串)
注意:实现类上可以不添加Webservice注解