一谈到webservice,总是会出现jax-ws,axis,cxf这样子的技术字眼,但是webservice到底是什么呢,和上面那些技术又有着怎样的关系呢?


一、web service到底是什么?


    先看百度百科,Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准通用标记语言下的一个子集)标准描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序

      上面文绉绉的,一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术

     所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。

   所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银行服务器上。再比如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率,往大的概念上吹,就是所谓的SOA应用。


二、WebService平台技术

   XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。下面分别简单介绍他们的作用。

   XML+XSD:

       WebService采用HTTP协议传输数据,采用XML格式封装数据,XML是WebService平台中表示数据的格式,xsd也就是XML Schema,用来定义一个xml。

    SOAP:Simple Object Access Protocol(简单对象访问协议),SOAP协议 = HTTP协议 + XML数据格式

      用xml表示数据之后,通过http协议传输,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。

      SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。

 wsdl:Web Services Description Language(网络服务描述语言)。

     一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。

        好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 


三、WebService开发

  WebService开发可以分为服务器端开发和客户端开发两个方面:

   服务端开发:把公司内部系统的业务方法发布成WebService服务,向外界暴露出wsdl地址,供远程合作单位和个人调用。(借助一些WebService框 架可以很轻松地把自己的业务对象发布成WebService服务,Java方面的典型WebService框架包括:axis,xfire,cxf等,后面会详细介绍如何开发服务端)


   客户端开发:通过别人暴露的wsdl地址,调用别人发布的WebService服务,大多数人从事的开发都属于这个方面,例如,调用天气预报WebService服务。(使用厂商的WSDL2Java之类的工具生成静态调用的代理类代码;使用厂商提供的客户端编程API类;使用SUN公司早期标准的jax-rpc开发包;使用SUN公司最新标准的jax-ws开发包。当然SUN已被ORACLE收购)


四、webService工作原理

   WebService的工作调用原理:

     对客户端而言,我们给这各类WebService客户端API传递wsdl文件的url地址,这些API就会创建出底层的代理类,我调用这些代理,就可以访问到webservice服务。代理类把客户端的方法调用变成soap格式的请求数据再通过HTTP协议发出去,并把接收到的soap数据变成返回值返回。

    对服务端而言,各类WebService框架的本质就是一个大大的Servlet,当远程调用客户端给它通过http协议发送过来soap格式的请求数据时,它分析这个数据,就知道要调用哪个java类的哪个方法,于是去查找或创建这个对象,并调用其方法,再把方法返回的结果包装成soap格式的数据,通过http响应消息回给客户端。



   本文参考于:http://blog.csdn.net/wooshn/article/details/8069087,好文章应该得到分享!