本来这第二篇打算讲解“开发第一个基于XFire的webservice”的内容来着。但是想想。开发实例只是局限于了会用的层面上。如果想真正的理解webservice还是需要挖掘其原理。所以本篇文章我想还是和大家一起来学习一下webservice的原理吧。知其原理,应用直接就是小case了。在学习webservice的原理之前。我想还是有必要弄清另一个概念—SOA.这个概念在很多学术论文和文章中经常和webservice一起被提起。刚开始我一直不理解这两个概念的关系。所以我们先来看一下SOA.

SOA是英文Service-Oriented Architecture,即面向服务架构的缩写。 在有关书籍中他是这个定义的:SOA指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。从这个定义中定义者希望表达的前提有下面两点:

1) 软件系统架构:SOA不是一种语言,也不是一种具体的技术而是一种软件系统架构,它尝试给出在特定环境下推荐采用的一种架构,从这个角度上来说,它更像一种模式(Pattern)。因此它与很多已有的软件技术比如面向对象技术,是互补的而非互斥的。它们分别面向不同的应用场景,用来满足不同的特定需求。   

2) SOA的使用范围:需求决定同时也限制功能。SOA并不是包治百病的万灵丹,它最主要的应用场合在于解决在Internet环境下的不同商业应用之间的业务集成问题

从上面的定义其实我们不难发现。其实webservice简单来说就是SOA的一种体现形式。下面我们来看一下有关webservice的原理解释

WebService是一种跨编程语言和跨操作系统平台的远程调用技术


所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统(采用交互提问的方式来加深大家对此技术的理解)。

远程调用技术有什么用呢?商场的POS机转账调用的转账方法的代码是在银行服务器上,还是在商场的pos机上呢?什么情况下可能用到远程调用技术呢?例如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率,往大的概念上吹,就是所谓的SOA应用。

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

除了WebService外,常见的远程调用技术还有RMI(Remote method invoke)和CORBA,由于WebService的跨平台和跨编程语言特点,因此比其他两种技术应用更为广泛,但性能略低。

WebService使用SOAP协议实现跨编程语言和跨操作系统平台


WebService 采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。 WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明 HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议(simple object access protocol,简单对象访问协议) 。

SOAP协议= HTTP协议+ XML数据格式

SOAP协议是基于HTTP协议的,两者的关系就好比高速公路是基于普通公路改造的,在一条公路上加上隔离栏后就成了高速公路。商店的服务员只要收到了钱就给客户提供货物,商店服务员不用关心客户是什么性质的人,客户也不用关心商店服务员是什么性质的人。同样,WebService 客户端只要能使用HTTP协议把遵循某种格式的XML请求数据发送给WebService服务器,WebService服务器再通过HTTP协议返回遵循 某种格式的XML结果数据就可以了,WebService客户端与服务器端不用关心对方使用的是什么编程语言。

HTTP协议和XML是被广泛使用的通用技术,各种编程语言对HTTP协议和XML这两种技术都提供了很好的支持,WebService客户端与服务器端使用什么编程语言都可以完 成SOAP的功能,所以,WebService很容易实现跨编程语言,跨编程语言自然也就跨了操作系统平台

WSDL文件

好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。WebService客户端要调用一个 WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个 WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地 址表示,服务通过什么方式来调用。

WSDL(webservicedescription language)是基于XML格式的,它是WebService客户端和服务器端都能理解的标准格式,其中描述的信息可以分为what,where,how等部分!Ø

WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:

1.注册到UDDI服务器,以便被人查找

2.直接告诉给客户端调用者,例如,在自己网站给出信息或邮件告诉。

WebServices体系架构 


下面我们就来看一下Web Services的体系结构--面向服务的体系结构。如图:

Web Services的体系结构

从上图可以看出,SOA结构中共有三种角色:

(1) Service provider:服务提供商,发布自己的服务,并且对使用自身服务的请求进行响应。

(2) Service broker:服务注册中心,注册已经发布的Service provider,对其进行分类,并提供搜索服务,这是可搜索的服务描述注册中心,服务提供者在此发布他们的服务描述。在静态绑定开发或动态绑定执行期间,服务请求者查找服务并获得服务的绑定信息(在服务描述中)。对于静态绑定的服务请求者,服务注册中心是体系结构中的可选角色,因为服务提供者可以把描述直接发送给服务请求者。同样,服务请求者可以从服务注册中心以外的其它来源得到服务描述,例如本地文件、FTP 站点、Web 站点、广告和服务发现(Advertisement and Discovery of Services,ADS)或发现 Web 服务(Discovery of Web Services,DISCO)。

(3) Service Requester:服务请求者,利用Service broker查找所需的服务,然后使用该服务

SOA体系结构中的组件必须具有上述一种或多种角色。在这些角色之间使用了三种操作:

(1) Publish操作:使Service Provider可以向Service Broker注册自己的功能及访问接口

(2) Find操作:使Service Requester可以通过Service Broker查找特定种类的服务。

(3) Bind操作:使Service Requester能够真正使用Service provider。

为支持结构中的三种操作(publish、find和bind),SOA需要对服务进行一定的描述,这种服务描述(Service Description)应具有下面几个重要特点:首先,它要声明Service provider的语义特征。Service broker使用语义特征将Service provider进行分类,以帮助具体服务的查找。Service requester根据语义特征来匹配那些满足要求的Service provider。(因此,语义特征中重要的一点就是对Service provider的分类。)其次,服务描述应该声明接口特征,以访问特定的服务。最后,服务描述还应声明各种非功能特征,如安全要求,事务要求,使用Service provider的费用等等。接口特征和非功能特征也可以用来帮助Service requester对Service provider的查找。

Web 服务的构件


Web Services的构件可以通过下图给出了清晰的描述。

web Services构件模型

(1) 服务在这里,Web 服务是一个由服务描述来描述的接口,服务描述的实现就是该服务。服务是一个软件模块,它部署在由服务提供者提供的可以通过网络访问的平台上。服务存在就是要被服务请求者调用或者同服务请求者交互。当服务的实现中利用到其它的Web 服务时,它也可以作为请求者。当然更为重要的是:我们需要发现服务,这就要借助UDDI等技术来完成。

(2) 服务描述服务描述包含服务的接口和实现的细节。其中包括服务的数据类型、操作、绑定信息和网络位置。还可能包括可以方便服务请求者发现和利用的分类及其它元数据。服务描述可以被发布给服务请求者或服务注册中心。Web 服务体系结构解释了如何实例化元素和如何以一种可以互操作的方式实现这些操作。这一部分是通过WSDL——Web Services描述语言来实现。

(3) 消息格式这部分通常指的就是Web Services的内容需要进行展示所要支持消息格式,它用SOAP——简单对象访问协议,即在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。

(4) 编码任何发布出去的Web Services都要求以XML文件的形式,展现给用户或请求者,因为XML相当于另一个层面上的接口,不同的商家或单位都可通过将提供商发布的基于XML的Web Services数据提取出来,然后与自己的相关系统或软件产品集成,也就相当于提供商实现Web Services的同时也会使用者定义了一个标准。

(5) 传输这一部分就是计算机网络的应用,即提供商的Web Services最终会以什么渠道传输,比如:HTTP、SMTP等。

推荐阅读:一步一步学习webservice(三)开发第一个基于XFire的webservice

参考:http://blog.csdn.net/eefesa/article/details/1890094

------------------------------------------------------------------------------------------------------------

《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载

http://blog.csdn.net/csh624366188/article/details/7999247

from: http://blog.csdn.net/csh624366188/article/details/8224492

Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理相关推荐

  1. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)...

     本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天, ...

  2. Java程序员从笨鸟到菜鸟之(一百零九)一步一步学习webservice(三)开发第一个基于XFire的webservice

    在日常开发中,常用的webservice引擎主要有Axis,axis2,Xfire以及cxf(Xfire的升级版).现在只有axis2和cxf官方有更新.今天我们先以一个比较老的引擎为例.来讲诉一下w ...

  3. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)

    写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天,下午我们宿舍聚会,所以时间有点耽误,希望大家见谅 上接: Java程序员从笨鸟到菜鸟之(四)java开发常用类( ...

  4. Java程序员从笨鸟到菜鸟之(一百零六)java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.

    在平常的开发中我们常常遇到不仅仅只是导出excel报表的情况.有时候也需要导出pdf或者CSV报表.其实原理都差不多.刚开始本来不打算也这篇博客介绍这个的.感觉这篇博客和前面的博客有点雷同.原理基本都 ...

  5. Java程序员从笨鸟到菜鸟全部博客目录

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章 大 ...

  6. Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表...

    在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅仅简单的读取office中的数据.尤其是在生 ...

  7. Java程序员从笨鸟到菜鸟之(序言)+全部链接

    http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,除去前半年几乎全玩了, ...

  8. Java程序员由笨鸟到菜鸟 电子版书正式发布 欢迎大家下载

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 欢迎关注 ...

  9. java程序员从笨鸟到菜鸟_Java程序员从笨鸟到菜鸟之(十四)Html基础积累总结(上)...

    [新朋友]点击标题下面(↑)蓝色字"Java那些事"关注 [老朋友]点击右上角,转发或分享本页面内容 这是我以前写的<java程序员由笨鸟到菜鸟>系列博客,每天更新一篇 ...

最新文章

  1. java treeset原理_Java集合 --- TreeSet底层实现和原理(源码解析)
  2. LeetCode: 103. Binary Tree Zigzag Level Order Traversal
  3. python画彩色城墙_Python绘制城堡-(有惊喜!!!)
  4. CHIL-ORACLE-唯一约束(unique)
  5. Hspice2008安装步骤
  6. DFA的构造C语言,DFA的编程实现含源代码实验报告剖析
  7. 20190408 Java中的Double类型计算
  8. js将base64做UrlEncode转码
  9. 配置 Docker 加速器
  10. 我为什么要写《OpenCV Android 开发实战》这本书
  11. 求指教,PSO算法跟踪光伏电池最大功率点
  12. html图片做成菱形,CSS秘密花园:菱形图片
  13. Bitly发布趋势链接搜索引擎Realtime
  14. 刺激战场android闪退,刺激战场总是闪退怎么办?刺激战场闪退解决办法
  15. win11如何连接打印机 win11连接打印机的设置方法
  16. 利用洪特规则计算原子离子磁矩过程详解
  17. zoj 3864 Quiz for EXO-L(连通块 bfs)
  18. 怎么看伦敦银实时行情走势图?
  19. 图像的基本操作 | 十
  20. 如何让服务器自动储存,Word文档怎么设置自动保存设置

热门文章

  1. iOS pod init 报错
  2. 2020年一季度中小微企业收入平均下降69.5%
  3. 英伟达宣布全面支持ARM高性能计算,三周打造全球排名第22超算
  4. 比特币与企业级区块链的区别
  5. “人工智能大脑”跳槽记:吴恩达所理解的智能
  6. Linux GCC lib库相互引用,互相依赖(交叉引用)链接解决办法
  7. Java8 - 使用工厂方法 supplyAsync创建 CompletableFuture
  8. Redis进阶-Stream多播的可持久化的消息队列
  9. MySQL- SQL执行计划 统计SQL执行每阶段的耗时
  10. 白话Elasticsearch64-zen discovery集群发现机制