WebService学习系列之基础理论知识

WebService学习系列之基础理论知识

Webservice脑图

本系列文章将介绍WebService是什么、 WebService的应用场景、WebService的标准规范、WebService的分类、WebService的落地实现框架、WebService怎么玩

是什么

是什么?

webservice就是web服务,其本质是远程调用技术的一套标准或规范

应用场景

应用场景

webservice应用于需要进行远程过程调用的场景中,比如获取天气预报的服务等

调用过程
1.服务端暴露服务
2.客户端调用服务端提供的服务

交互细节
1.服务器首先用一套标准的方法向外界描述它所提供的服务的内容,就属于JAX-WS规范中的WSDL;
2.客户端需要以一种标准的协议来调用此服务,这属于JAX-WS规范中的SOAP;
3.服务提供者将服务内容放在一个公共的网址让大家查询,就属于JAX-WS规范中 的UDDI.(可以没有).

标准规范

webservice标准规范

WebService是一套标准规范,它制定了webservice开发的套路,只有按照这套标准玩才能开发webservice。有过三种标准,分别是JAX-WS、JAX-RS、JAXM&SAAJ,下面是各种规范的概念性东西,非常枯燥,但是也需要了解一下。

1.JAX-WS(JAX-RPC)

JAX-WS 的全称为Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-Remote Procedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。

JAX-WS的三要素:WSDL、SOUP、UUDI

  • WSDL——本质是服务内容的标准化描述,是一种接口API文档

WSDL的全称是web service Description Language,是一种基于XML格式的关于web服务的描述语言。

WSDL作用:web service提供者发布自己web服务的API文档,通过这个文档使用者可以知道接口服务的访问路径、服务方法、接口参数及参数的类型、服务返回值及值的类型等等。

WSDL获取: WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:
1.注册到UDDI服务器,以便被人查找;
2.直接告诉给客户端调用者。

  • SOAP——本质是标准的传输协议

SOAP是web service的标准通信协议,SOAP为simple object access protocoll的缩写,简单对象访问协议. 它是一种标准化的传输消息的XML消息格式。WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC(Remote Procedure Call Protocol——远程过程调用协议)方法来调用Web Service。Soap协议是基于http的应用层协议,soap协议传输是xml数据。所以SOAP协议 = HTTP协议 + XML数据格式。

  • UUDI——本质是服务的公共网址。

将web service进行UDDI注册发布,UDDI是一种创建注册表服务的规范,以便大家将自己的web service进行注册发布供使用者查找.然而当服务提供者想将自己的web service向全世界公布,以便外部找到其服务时,那么服务提供者可以将自己的web service注册到相应的UDDI商用注册网站。
因为WSDL文件中已经给定了web service的地址URI,外部可以直接通过WSDL提供的URI进行相应的web service调用。所以UDDI并不是一个必需的web service组件,服务方完全可以不进行UDDI的注册。

2.JAX-RS

JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范,由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行。
jax-RS可以发布 rest风格webservice,因为rest的webservice不采用soap传输,直接采用http传输,可以返回xml或json,比较轻量。听说以后会流行这种规范,不过我现在还暂时在实际项目中没有应用到,暂时没有学习该系列知识。

3.JAXM&SAAJ(已废弃)

JAXM(JAVA API For XML Message)主要定义了包含了发送和接收消息所需的API,SAAJ(SOAP With Attachment APIFor Java,JSR 67)是与JAXM 搭配使用的API,为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输等,JAXM&SAAJ 与JAX-WS 都是基于SOAP 的Web 服务,相比之下JAXM&SAAJ 暴漏了SOAP更多的底层细节,编码比较麻烦,而JAX-WS 更加抽象,隐藏了更多的细节,更加面向对象,实现起来你基本上不需要关心SOAP 的任何细节)

分类

Webservice分类

根据其规范的不同,产生了不同风格的webservice

1、SOAP WebService,采用JAX-WS规范。一般如果不特殊说明,平时我们听说的Webservice就是指的SOAP WebService,后面讨论的也都是这种。
2、RESTful WebService,采用 JAX-RS规范。听说以后会流行这种。后面补讨论这种。

落地实现框架

天上飞的理论,必须要有落地的实现,webservice指定了一套标准规范,就必须要有一套实现了它规范的实现,落地实现框架有如下几种

落地实现框架

cxf和axis2最为常用,Axis与XFire已随着技术不断的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis与XFire都已不再更新。

那些落伍的框架本人认为只需要知道有这么回事就行,毕竟就怕有些姥姥级别的项目里面还有用这些框架开发webservice服务端的,如果这些落后的框架支持一些被废弃的webservice规范,如果用其他流行框架根据wsdl生成客户端代码时,有可能不支持,本人就遇到过用JAX-RPC这种被废弃的规范开发的webservice服务端的,我根据它生成的wsdl文件,用cxf去生成webservice客户端代码时失败了。但是用AXIS2框架提供的工具可以生成,我估计是AXIS2框架还是支持JAX-RPC这种被废弃的规范。

  • JWS——最简单、方便

这是Java6发布所提供的对Web Service服务的一种实现。它开发最简单,最方便,不过实际项目中用得并不多,个人估计是功能没有CXF和AXIS2全,性能也没有他们高。

  • CXF——最流行

最流行的框架。CXF是Apache旗下一个重磅的SOA简易框架,它实现了ESB(企业服务总线)。CXF来自于XFire项目,经过改造后形成的,就像目前的Struts2来自WebWork一样。可以看出XFire的命运会和WebWork的命运一样,最终会淡出人们的视线。CXF不但是一个优秀的Web Services / SOAP / WSDL 引擎,也是一个不错的ESB总线,为SOA的实施提供了一种选择方案,当然他不是最好的,它仅仅实现了SOA架构的一部分。
注:对于Axis2与CXF之间的关系,一个是Axis2出现的时间较早,而CXF的追赶速度快。

  • AXIS2——重量级,需要很多jar包

Axis2是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码。这是它的优势所在。但是,这也不可避免的导致了Axis2的复杂性,使用过的开发者都知道,它所依赖的包数量和大小都是很惊人的。

  • AXIS——已落伍,被AXIS1取代

AXIS2的早期产品,被AXIS2升级取代

  • Xfire——已落伍,被CXF整合取代

XFire是一个高性能的WebService框架,在Java6之前,它的知名度甚至超过了Apache的Axis2,XFire的优点是开发方便,与现有的Web整合很好,可以融为一体,并且开发也很方便。但是对Java之外的语言,没有提供相关的代码工具。XFire后来被Apache收购了,原因是它太优秀了,收购后,被整合到CXF中去了。

怎么玩

既然有这么多落地的实现框架,那么就可以用这些框架来进行WebService开发。利用这些Webservice开发框架来进行开发非常简单。

1.如果我们是开发客户端
那么我们可以直接通过服务端发布的wsdl文件直接生成客户端代码,都不用自己开发代码。

2.如果我们是开发服务端

  • 可以先按Webservice框架的API进行开发后,发布webservice服务,最后生成wsdl文件;
  • 也可以先提前制定wsdl文件,然后通过wsdl文件生成服务端代码发布webservice服务,这种方式服务端不需要自己开发代码,不过手动编写wsdl文件不是那么简单,但是有工具可以利用wsdl Editor,就是那种傻瓜式的图形化拖拽软件。制定好接口规范后,可以用wsdl Editor来编辑生成对应接口规范的wsdl文件。

下面几篇文章中我将介绍如何使用jdk,cxf两种框架来开发webservice


怎么玩
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容