webservice简介及发布自定义的服务

来源:互联网 发布:达内php视频 百度网盘 编辑:程序博客网 时间:2024/05/01 08:34

一    为什么需要web服务

当我们在Internet上邀游时,会发现不同的网站提供了各种不同的服务,而且有时不同的网站提供相似的服务。例如,我们经常会看到很多网页上有关天气的信息。下图是百度首页提供的天气预报,这些信息是动态的、实时更新的。


这些有关天气的数据是如何获取的昵?是人为手动录入的?还是每个网站都有自己的气象勘测仪器?两者都不太可能。其实是专业的气象站提供的一种服务,这项服务就是输出最专业的天气数据。气象站让其他应用程序可以随时访问它提供的这项服务,并把天气数据返回给访问者。这样,在不同的网页上,就可以将真实的天气情况展现给用户。

类似的服务还有很多。在很多旅游网站(如去哪儿)可以轻松地查询机票信息、火车票信息,如下图所示。这些信息都是各大航空公司或全国铁路局统一发布的数据。


在Internet上提供的这种服务,我们称之为Web服务(即WebService)。Web服务的主要目标。是支持跨平台的可互操作性。Web服务为Internet上应用程序之间的交互提供了方便,只要有Web服务,不管是什么系统,都可以跨平台、跨语言进行调用。Web服务也减轻了企业级应用中出现的异构系统的整合危机。Web服务的优势包括以下几点。

(1)封装性:Web服务是一种Web应用,具备良好的封装性。对使用者而言,仅看到服务描述,而该服务的具体实现、运行平台都是透明的,调用者无须关心,也无法关心。Web服务作为整体提供服务。

(2)松散耦合:当Web服务的实现发生改变时,对调用者没有影响。对调用者而言,只要服务。实现的接口不发生变化,具体实现的改变是完全透明的。

(3)使用标准协议:Web服务所有的公共协议都使用标准协议描述、传输和交换。这些标准协议在各种平台上完全相同。

(4)高度整合的能力:由于Web服务采用简单、易理解的标准Web协议作为通信协议,完全属蔽了不同平台的差异,无论是CORBA、DCOM还是EJB,都可以通过这种标准协议进行互操作,实现系统的最高可整合性。

(5)高度的开放性:Web服务具有语言和平台无关性,它支持各种通信协议,如HTTP、SMTP等。


二   什么是web服务

         Web服务是一种可以用来解决跨网络应用集成问题的开发模式,这种模式为实现“软件即服务:提供了技术保障。而“软件即服务”实际上是一种提供软件服务的机制,目的是保证不同平台的应用服务可以互操作。根据W3C(万维网联盟)的定义,Web服务是一个软件系统,用以支持网络间不同机器的互操作。网络服务通常是由许多应用程序接口(API)所组成的。调用者可以获得这些接口并通过网络进行基于XML的数据通信来调用服务。

        概括地说,Web服务是单一的、构件化的程序功能实体,能够通过网络来发布、定位、调用。在Web服务的体系结构中,描述了3个核心角色,即服务提供者(Service Provider)、服务请求者(Service Requester)和服务中介(Service Broker);另外,也定义了3个核心操作,即发布、查找和绑定。它们的关系是,服务提供者通过服务中介来注册并发布服务,服务请求者通过查找服务中介发现并定位到服务,服务请求者绑定服务提供者来使用特定的服务。

     如何做到这些昵?目前,有两种最广泛使用的开发Web服务的方法,分别是基于SOAP的Web服务及REST  (Representational State Transfer,表述性状态转移) 风格的'Web服务。在本章我们介绍的是基于SOAP的Web服务。

Web服务提供了一系列标准,定义了应用程序在Web上进行互操作的规范。因此,Web服务的3个核心操作都是基于这些规范完成的,如图所示。


          上图展示了3个核心角色,以及它们之闯通信所基于的核心技术规范。这主要包括发布服务使用的UDDI,查找服务使用的UDDl和WSDL,以及绑定服务使用的WSDL和SOAP。具体说明如下。

1.SOAP

        SOAP(SimpleObject Access Protocol,简单对象访问协议)是一个基于XML,的协议,用于在分步的应用程序之间交换数据。因为基于XML,所以,任何应用程序都可以识别。另外,SOAP本身没有定义任何程序语义,这使得SOAP能够以消息的形式传递到各种远程系统中。SOAP所使用的传输协议,可以是HTTP. SMTP、POP3、JMS,其中最常用的是HTTP。

        SOAP包括4个部分:“SOAP封装(Envelop)”定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它,以及如何处理它们的框架;“SOAP编码规则(EncodingRules.)”用于表示应用程序需要使用的数据类型的实例;“SOAP RPC表示(RPC Representation)”表示远程过程调用和应答的协定;“SOAP绑定(Binding)”使用底层协议交换信息。虽然这4个部分都作为SOAP的一部分,是作为一个整体定义的,‘但它们在功能上是相交的、彼此独立的。

2.WSDL

      WSDL(WebServices Description Language,Web服务描述语言)是一个XML文档,它以一种和具体浯言无关的抽象方式定义了给定Web服务收发的有关操作和消息。WSDL文件定义了Web服务的名称、处理服务的方法及需要的参数。在WSDL文档中,将服务定义为一个网络端点(EndPoint)的集合。一个完整的WSDL文档包括类型Types(数据类型定义的容器);消息Message(通信数据抽象的类型定义);操作Operation(服务所支持动作的抽象描述);端口类型PortType(一个操作的抽象集合);绑定Binding(针对一个特定端口类型的具体协议规范和数据格式规范);端口Port(一个单一的End Point,定义成一个绑定和一个网络地址的连接);服务Service(相关端点的集合)。通过下图所示的WSDL文件,可以对照来理解。


3.UDDI

UDDl (Universal Description Discovery and Integration,统一描述发现和集成协议)是一个规范,定义了与Web服务相关的信息的发布、发现和管理。同时UDDI还包括一组使企业能将自身提供Web服务注册,以使别的企业能够发现的访问协议的实现标准。通过使用UDDI的发现服务,企业可以注册Web服务,允许别的企业调用本身的Web服务。

 

问题:SOAP、WSDL看起来比较复杂,需要手写吗?

解答:对于SOAP、WSDL,只需要掌握到能够读懂的层面,在真正开发的过程中,通过工具可以快捷生成这些文档。对于标准有较好的理解,可以帮助你更好地开发Web服务和处理开发过程中产生的问题。


三  web服务应用领域

Web服务在实际项目应用中被广泛使用。使用最多的有3个领域。

1.异构平台的整合

在很多实际开发的项目中,由于系统使用时间长,功能不能满足新的需求,需要进行升级时,有时候就会考虑利用新的开发语言开发,但是,原有系统中的大量有用数据想要继续使用就比较困难。Web服务这时就可以成为新旧系统之间整合的桥梁,通过XML的跨平台特性,可以使不同系统的信息交互成为可能。

2.发布商用服务

在现在的互联网上,电子商务已经逐渐走进人们的日常生活中。在商品的交易过程中,一个电子商务公司需要开通网上支付功能,可以通过第三方支付平台(如支付宝、网络银行)或者通过与银行进行合作。不管是通过哪种形式,都只需要获得一个支付和结算接口,就可以使用相应的Web服务了。

3.基于SOA架构思想的应用

SOA( Service-Oriented  Arch itecture)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口.和契约联系起来。简单地说,。SOA.就是一种面向服务的架构思想,是一种设计原则,而Web服务则是SOA思想实践的一种表现形式而已。在很多关于SOA架构的应用中都有Web服务的身影。SOA的理想就是广泛的适应性和最大限度的业务的可重用性。


============================================================

四   发布一个自定义的web服务

一、准备工作(以下为本实例使用工具)

1MyEclipse10.7.1

2JDK 1.6.0_22

 

二、创建服务端

1、创建【Web Service Project】,命名为【TheService】。


如图


2、创建【Class】类,命名为【ServiceHello】,位于【com.hyan.service】包下。


如图


3、编写供客户端调用的方法,即编译方法代码。


4、进行编译

说明:编译失败的话,请将该项目引用的jdk设置为1.6.0_17版本或更高版本


结果


5、测试结果

测试地址:http://localhost:9001/Service/ServiceHello?wsdl


三、生成客户端

1、创建【Web Service Project】,命名为【TheClient】。


设置工程参数


2、命令提示窗口执行生成命令。

格式:wsimport-s "src目录" -p “生成类所在包名” -keep “wsdl发布地址

示例:

wsimport -s G:\\workspace\\webService\\TheClient\\src-p com.hyan.client -keep http://localhost:9001/Service/ServiceHello?wsdl

说明:

1"src目录"地址不可含空格

2“wsdl发布地址不要漏了“?wsdl”


3、刷新项目,检查生成类


结果


四、最终测试

1、创建【Class】类,命名为【ServiceTest】,位于【com.hyan.test】包下。


如图:


测试代码


2、编写测试方法,调用服务端方法,并打印返回的结果。

【注意】改测试在局域网的其它机器上一样的操作。

运行后的结果如图:



五、注意事项

1JDK版本过低问题

报类似如下的异常:runtime modeler error: Wrapper classcom.hyan.service.jaxws.GetValue is not found. Have you run APT to generatethem?


原因:JDK版本低于1.6.0_17

解决方法:调整该服务端项目所引用的JDK版本为安装的高版本JDK


接下来配置


继续


添加jre


继续


选择jdk安装路径


结果


选为默认


最终项目的jdk版本为


2、生成命令路径含空格问题

报类似如下的异常:directory not found: G:\SVN_FILE\GB\05


原因:客户端src路径不可含有空格

解决方法:在不含空格路径的文件夹下重新创建客户端即可。

 

3、生成命令不完整问题

报类似如下的异常:[ERROR] failed.noservice=Could not find wsdl:service in theprovided WSDL(s):


原因:生成命令末尾缺少“?wsdl”

解决方法:补上即可。

错误不完整的命令示例:

wsimport  -s G:\\workspace\\webService\\TheClient\\src -p com.hyan.client -keephttp://localhost:9001/Service/ServiceHello

正确完整的命令示例:

wsimport -s  G:\\workspace\\webService\\TheClient\\src -p com.hyan.client -keephttp://localhost:9001/Service/ServiceHello?wsdl

=======================================

如果帮到了您,请点个赞吧!!










原创粉丝点击