一、WebService到底是什么?
先来看下标准的定义:Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。
其实,一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
还可以从多个角度来理解WebService,从表面看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。
二、WebService平台技术
SOAP、WSDL、UDDI(UniversalDescriptionDiscovery andIntegration)三者构成了WebService的三要素。下面,详细阐述这三大技术:
-
SOAP
WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。
SOAP协议组成:
SOAP协议 = HTTP协议 + XML数据格式
SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。 -
WSDL
好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。 -
UDDI
UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。
三、WebService调用原理
实现一个完整的Web服务工作流程:
-
Web服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册;
-
Web服务请求者向Web服务中介者请求特定的服务,中介者根据请求查询UDDI注册中心,为请求者寻找满足请求的服务;
-
Web服务中介者向Web服务请求者返回满足条件的Web服务描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读;
-
利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给Web服务提供者,以实现Web服务的调用;
-
Web服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。
四、WebService实例教程
以 java 创建WebService服务为例:
-
一.WebService服务端开发
1.创建服务端项目,项目可以是Java Web项目,也可以是普通的Java项目,例如:
2.在源代码目录src下面的包中新建一个java类用来提供WebService服务,我这里创建了一个Function类,通过javax.jws.WebService注解提供服务,通过javax.xml.ws.Endpoint类的publish方法来发布服务并提供发布的地址以及发布的服务类,代码如下:
1 package com.jspweb.ws; 2 3 import javax.jws.WebService; 4 import javax.xml.ws.Endpoint; 5 6 /** 7 * WebService服务端案例 8 * @author AlanLee 9 * @version 2017/06/02 10 * 使用@WebService注解标注实现类 11 */ 12 @WebService 13 public class Function { 14 public String transWords(String words){ 15 String res = ""; 16 for(char ch : words.toCharArray()){ 17 res += ch+","; 18 } 19 return res; 20 } 21 22 public static void main(String[] args) { 23 // 使用Endpoint(终端)类发布webservice 24 Endpoint.publish("http://localhost:8089/service/function", new Function()); 25 System.out.println("Publish Success"); 26 } 27 }
3.启动main方法运行这个类,打印出结果Publish Success,表示服务发布成功:
4.打开浏览器,访问我们发布的地址,大家可以看到这样的效果:
5.点击WSDL后面的连接地址便可以打开WSDL配置,访问结果如下:
WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。
二、WebService客户端开发
1.创建客户端项目,项目可以是Java Web项目,也可以是普通的Java项目,例如:
2.使用eclipse工具生成客户端代码,跟着图一步步操作:
①选中项目点击鼠标右键new>Other...:
②在Wizards框中输入web,选择Web Service Client,点击next按钮:
③输入WSDL服务描述文件的访问地址,点击next:
④点击Finish按钮,eclipse会自动帮我们在src目录下生成WebService客户端所需的代码:
⑤:生成的代码如下:
2.编写客户端测试类代码,我在同级目录下面写了一个测试类,并运行它的main方法,得到结果如下:
这样一个简单的WebService入门实例就完成了。