WebService學習系列之基礎(chǔ)理論知識
本系列文章將介紹WebService是什么幕屹、 WebService的應(yīng)用場景湃鹊、WebService的標準規(guī)范、WebService的分類惑申、WebService的落地實現(xiàn)框架岩睁、WebService怎么玩
是什么
webservice就是web服務(wù)燥狰,其本質(zhì)是遠程調(diào)用技術(shù)的一套標準或規(guī)范
應(yīng)用場景
webservice應(yīng)用于需要進行遠程過程調(diào)用的場景中棘脐,比如獲取天氣預(yù)報的服務(wù)等
調(diào)用過程
1.服務(wù)端暴露服務(wù)
2.客戶端調(diào)用服務(wù)端提供的服務(wù)
交互細節(jié)
1.服務(wù)器首先用一套標準的方法向外界描述它所提供的服務(wù)的內(nèi)容斜筐,就屬于JAX-WS規(guī)范中的WSDL;
2.客戶端需要以一種標準的協(xié)議來調(diào)用此服務(wù),這屬于JAX-WS規(guī)范中的SOAP;
3.服務(wù)提供者將服務(wù)內(nèi)容放在一個公共的網(wǎng)址讓大家查詢蛀缝,就屬于JAX-WS規(guī)范中 的UDDI.(可以沒有).
標準規(guī)范
WebService是一套標準規(guī)范顷链,它制定了webservice開發(fā)的套路,只有按照這套標準玩才能開發(fā)webservice屈梁。有過三種標準嗤练,分別是JAX-WS榛了、JAX-RS、JAXM&SAAJ煞抬,下面是各種規(guī)范的概念性東西霜大,非常枯燥革答,但是也需要了解一下战坤。
1.JAX-WS(JAX-RPC)
JAX-WS 的全稱為Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服務(wù)規(guī)范JAX-RPC(Java API For XML-Remote Procedure Call)目前已經(jīng)被JAX-WS 規(guī)范取代残拐。從java5開始支持JAX-WS2.0版本途茫,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本溪食。
JAX-WS的三要素:WSDL囊卜、SOUP、UUDI
-
WSDL——本質(zhì)是服務(wù)內(nèi)容的標準化描述错沃,是一種接口API文檔
WSDL的全稱是web service Description Language,是一種基于XML格式的關(guān)于web服務(wù)的描述語言栅组。
WSDL作用:web service提供者發(fā)布自己web服務(wù)的API文檔,通過這個文檔使用者可以知道接口服務(wù)的訪問路徑枢析、服務(wù)方法笑窜、接口參數(shù)及參數(shù)的類型、服務(wù)返回值及值的類型等等登疗。
WSDL獲取: WSDL文件保存在Web服務(wù)器上排截,通過一個url地址就可以訪問到它》妫客戶端要調(diào)用一個WebService服務(wù)之前断傲,要知道該服務(wù)的WSDL文件的地址。WebService服務(wù)提供商可以通過兩種方式來暴露它的WSDL文件地址:
1.注冊到UDDI服務(wù)器智政,以便被人查找认罩;
2.直接告訴給客戶端調(diào)用者。
-
SOAP——本質(zhì)是標準的傳輸協(xié)議
SOAP是web service的標準通信協(xié)議续捂,SOAP為simple object access protocoll的縮寫垦垂,簡單對象訪問協(xié)議. 它是一種標準化的傳輸消息的XML消息格式。WebService通過HTTP協(xié)議發(fā)送請求和接收結(jié)果時牙瓢,發(fā)送的請求內(nèi)容和結(jié)果內(nèi)容都采用XML格式封裝劫拗,并增加了一些特定的HTTP消息頭,以說明HTTP消息的內(nèi)容格式矾克,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議页慷。SOAP提供了標準的RPC(Remote Procedure Call Protocol——遠程過程調(diào)用協(xié)議)方法來調(diào)用Web Service。Soap協(xié)議是基于http的應(yīng)用層協(xié)議,soap協(xié)議傳輸是xml數(shù)據(jù)酒繁。所以SOAP協(xié)議 = HTTP協(xié)議 + XML數(shù)據(jù)格式滓彰。
-
UUDI——本質(zhì)是服務(wù)的公共網(wǎng)址。
將web service進行UDDI注冊發(fā)布,UDDI是一種創(chuàng)建注冊表服務(wù)的規(guī)范,以便大家將自己的web service進行注冊發(fā)布供使用者查找.然而當服務(wù)提供者想將自己的web service向全世界公布州袒,以便外部找到其服務(wù)時揭绑,那么服務(wù)提供者可以將自己的web service注冊到相應(yīng)的UDDI商用注冊網(wǎng)站。
因為WSDL文件中已經(jīng)給定了web service的地址URI郎哭,外部可以直接通過WSDL提供的URI進行相應(yīng)的web service調(diào)用洗做。所以UDDI并不是一個必需的web service組件,服務(wù)方完全可以不進行UDDI的注冊彰居。
2.JAX-RS
JAX-RS 是JAVA 針對REST(Representation State Transfer)風格制定的一套Web 服務(wù)規(guī)范诚纸,由于推出的較晚,該規(guī)范(JSR 311陈惰,目前JAX-RS 的版本為1.0)并未隨JDK1.6 一起發(fā)行畦徘。
jax-RS可以發(fā)布 rest風格webservice,因為rest的webservice不采用soap傳輸抬闯,直接采用http傳輸井辆,可以返回xml或json,比較輕量溶握。聽說以后會流行這種規(guī)范杯缺,不過我現(xiàn)在還暫時在實際項目中沒有應(yīng)用到,暫時沒有學習該系列知識睡榆。
3.JAXM&SAAJ(已廢棄)
JAXM(JAVA API For XML Message)主要定義了包含了發(fā)送和接收消息所需的API萍肆,SAAJ(SOAP With Attachment APIFor Java,JSR 67)是與JAXM 搭配使用的API胀屿,為構(gòu)建SOAP 包和解析SOAP 包提供了重要的支持塘揣,支持附件傳輸?shù)龋琂AXM&SAAJ 與JAX-WS 都是基于SOAP 的Web 服務(wù)宿崭,相比之下JAXM&SAAJ 暴漏了SOAP更多的底層細節(jié)亲铡,編碼比較麻煩,而JAX-WS 更加抽象葡兑,隱藏了更多的細節(jié)奖蔓,更加面向?qū)ο螅瑢崿F(xiàn)起來你基本上不需要關(guān)心SOAP 的任何細節(jié))
分類
根據(jù)其規(guī)范的不同讹堤,產(chǎn)生了不同風格的webservice
1吆鹤、SOAP WebService,采用JAX-WS規(guī)范蜕劝。一般如果不特殊說明檀头,平時我們聽說的Webservice就是指的SOAP WebService,后面討論的也都是這種岖沛。
2暑始、RESTful WebService,采用 JAX-RS規(guī)范婴削。聽說以后會流行這種廊镜。后面補討論這種。
落地實現(xiàn)框架
天上飛的理論唉俗,必須要有落地的實現(xiàn)嗤朴,webservice指定了一套標準規(guī)范,就必須要有一套實現(xiàn)了它規(guī)范的實現(xiàn)虫溜,落地實現(xiàn)框架有如下幾種
cxf和axis2最為常用雹姊,Axis與XFire已隨著技術(shù)不斷的更替慢慢落幕,而目前也只有axis2和cxf官方有更新衡楞,Axis與XFire都已不再更新吱雏。
那些落伍的框架本人認為只需要知道有這么回事就行,畢竟就怕有些姥姥級別的項目里面還有用這些框架開發(fā)webservice服務(wù)端的瘾境,如果這些落后的框架支持一些被廢棄的webservice規(guī)范歧杏,如果用其他流行框架根據(jù)wsdl生成客戶端代碼時,有可能不支持迷守,本人就遇到過用JAX-RPC這種被廢棄的規(guī)范開發(fā)的webservice服務(wù)端的犬绒,我根據(jù)它生成的wsdl文件,用cxf去生成webservice客戶端代碼時失敗了兑凿。但是用AXIS2框架提供的工具可以生成凯力,我估計是AXIS2框架還是支持JAX-RPC這種被廢棄的規(guī)范。
-
JWS——最簡單礼华、方便
這是Java6發(fā)布所提供的對Web Service服務(wù)的一種實現(xiàn)沮协。它開發(fā)最簡單,最方便卓嫂,不過實際項目中用得并不多慷暂,個人估計是功能沒有CXF和AXIS2全,性能也沒有他們高晨雳。
-
CXF——最流行
最流行的框架行瑞。CXF是Apache旗下一個重磅的SOA簡易框架,它實現(xiàn)了ESB(企業(yè)服務(wù)總線)餐禁。CXF來自于XFire項目血久,經(jīng)過改造后形成的,就像目前的Struts2來自WebWork一樣帮非⊙跬拢可以看出XFire的命運會和WebWork的命運一樣讹蘑,最終會淡出人們的視線。CXF不但是一個優(yōu)秀的Web Services / SOAP / WSDL 引擎筑舅,也是一個不錯的ESB總線座慰,為SOA的實施提供了一種選擇方案,當然他不是最好的翠拣,它僅僅實現(xiàn)了SOA架構(gòu)的一部分版仔。
注:對于Axis2與CXF之間的關(guān)系,一個是Axis2出現(xiàn)的時間較早误墓,而CXF的追趕速度快蛮粮。
-
AXIS2——重量級,需要很多jar包
Axis2是Apache下的一個重量級WebService框架谜慌,準確說它是一個Web Services / SOAP / WSDL 的引擎然想,是WebService框架的集大成者,它能不但能制作和發(fā)布WebService欣范,而且可以生成Java和其他語言版WebService客戶端和服務(wù)端代碼又沾。這是它的優(yōu)勢所在。但是熙卡,這也不可避免的導(dǎo)致了Axis2的復(fù)雜性杖刷,使用過的開發(fā)者都知道,它所依賴的包數(shù)量和大小都是很驚人的驳癌。
-
AXIS——已落伍滑燃,被AXIS1取代
AXIS2的早期產(chǎn)品,被AXIS2升級取代
-
Xfire——已落伍颓鲜,被CXF整合取代
XFire是一個高性能的WebService框架表窘,在Java6之前,它的知名度甚至超過了Apache的Axis2甜滨,XFire的優(yōu)點是開發(fā)方便乐严,與現(xiàn)有的Web整合很好,可以融為一體衣摩,并且開發(fā)也很方便昂验。但是對Java之外的語言,沒有提供相關(guān)的代碼工具艾扮。XFire后來被Apache收購了既琴,原因是它太優(yōu)秀了,收購后泡嘴,被整合到CXF中去了甫恩。
怎么玩
既然有這么多落地的實現(xiàn)框架,那么就可以用這些框架來進行WebService開發(fā)酌予。利用這些Webservice開發(fā)框架來進行開發(fā)非常簡單磺箕。
1.如果我們是開發(fā)客戶端
那么我們可以直接通過服務(wù)端發(fā)布的wsdl文件直接生成客戶端代碼奖慌,都不用自己開發(fā)代碼。
2.如果我們是開發(fā)服務(wù)端
- 可以先按Webservice框架的API進行開發(fā)后松靡,發(fā)布webservice服務(wù)简僧,最后生成wsdl文件;
- 也可以先提前制定wsdl文件击困,然后通過wsdl文件生成服務(wù)端代碼發(fā)布webservice服務(wù)涎劈,這種方式服務(wù)端不需要自己開發(fā)代碼广凸,不過手動編寫wsdl文件不是那么簡單阅茶,但是有工具可以利用wsdl Editor,就是那種傻瓜式的圖形化拖拽軟件。制定好接口規(guī)范后谅海,可以用wsdl Editor來編輯生成對應(yīng)接口規(guī)范的wsdl文件脸哀。
下面幾篇文章中我將介紹如何使用jdk,cxf兩種框架來開發(fā)webservice