工做中接觸到了一些webservice應用,進而想整理出一些東西,給組裏如我同樣的毛頭小夥子分享下,後來以爲在OSC一直默默潛水了快兩年了,好像沒留下過什麼有價值的東西,就順路記在這裏吧,望老鳥和高手多多批評指正,新手多多交流~java
暫時寫了兩篇草稿,第一篇是理論篇,介紹了我所認識的webservice,主要摘錄了Andrew830314#163.com的《Java的webservice支持》的部份內容,而後加上了我本身對webservice的一些理解,不求多詳細複雜,只但願有JavaWeb基礎但沒有 webservice基礎的開發人員,對 webservice有一個初步的認識,知道它是什麼,有什麼,作什麼的;第二篇是實踐篇,介紹了我用cxf作的一個demo,主要參考了http://cxf.apache.org/,力求例子簡單直觀,讓開發人員知道怎樣使用最基本的webservice,爲掌握 webservice開發預熱。web
正文以下apache
SOA(Service-Oriented Architecture)面向服務架構,將應用程序的不一樣功能單元經過中立的契約(獨立於硬件平臺、操做系統、編程語言和應用)聯繫起來。
@路飛 例如一個iphone上的在線銷售系統:服務端基於Java,部署在Linux服務器上,提供了某功能X,例如根據輸入的商品ID和數量,從商品庫中檢索單價,而後計算總額,最後輸出總額;客戶端基於Object-C,是安裝在iphone上的app,提供了某功能Y,例如根據用戶選擇的商品及其數量,告訴客戶所選商品的總額;這裏,Y功能須要經過中立的契約(穿越了Linux和IOS,穿越了Java和Object-C)來與X功能通訊,從而使整個應用程序完整。
@路飛 PS 關於iphone和Object-C徹底是我杜撰的,我對iphone和Object-C一無所知,這裏只是爲了說明「中立的契約」,以及趕時髦。。。要是這個例子有問題,能夠換成Windows和.NET。。。。。。
目前來講,webservice是SOA的一種較好的實現方式,webservice採用HTTP做爲傳輸協議,SOAP(Simple Object Access Protocol)做爲傳輸消息的格式。但webservice並非徹底符合SOA的概念,由於SOAP協議是webservice的特有協議,並未符合SOA的傳輸協議透明化的要求。
@路飛 webservice這個東西基本實現了上面「中立的契約」的功能:「SOAP做爲傳輸消息的格式」,SOAP格式實際上是使用了xml這種跨平臺的文件格式,即webservice傳輸的消息被解析成xml格式,而後「webservice採用HTTP做爲傳輸協議」,http協議固然各個平臺都支持了,因而從傳輸通道到傳輸的內容都實現了跨平臺。具體細節如SOAP傳輸消息的格式暫時還請不要太深究,個人經驗是沒親身試用以前越想得多越不利於深刻學習。。。
@路飛 「並未符合SOA的傳輸協議透明化的要求」這一點,我理解的也不很清楚,下面是一點不成熟的見解:SOAP是webservice的消息傳輸格式,X功能和Y功能想要使用webservice進行通訊,就必須針對SOAP格式進行額外的開發工做,而不能直接使用對全部平臺都透明的消息傳輸格式格式(如http,即不只使用http作傳輸通道,還直接使用它的消息格式攜帶信息,而不是先轉成SOAP格式再讓http傳輸(最新研究 JAX-RS發現這個webservice好像差很少實現了,須要進一步確認)(果真是知道的越多,才發現本身無知的越多,JAX-RS剛看到不久,結果引出了這個很差處理的問題,對新手的建議是這部分了解下就能夠了,咱們的目的是掌握webservice的最小功能,其餘的功能等有基礎了再進一步學習))。但是既然想經過「中立的契約」跨平臺交互,這種本地適應化工做不是必須的麼,「傳輸協議透明化」是爲了追求本地適應化的最小工做量麼?
@路飛 我工做中接觸到的webservice的中立性主要體如今了跨應用上,即主要用於不一樣的Java應用進行交互,如服務端和客戶端是兩個不一樣的應用,而後客戶端經過webservice調用服務端的某核心功能,跨硬件平臺、編程語言這種複雜應用還沒接觸到~
@路飛 總結一下,我所理解的最小功能的webservice,就是A和B兩個java應用,其中A爲服務端server,對外提供了某項功能的webservice接口,B爲客戶端Client,須要調用這個webservice接口實現某業務。這其中涉及到的東西包括A如何把本身的普通方法對外暴露成webservice接口,以及B如何使用別的應用(A)的接口爲本身的業務工做。這些東西在第二篇實踐篇中將會有一個詳細的demo級別的demo爲你們作介紹,該demo的最低技能要求爲:一、知道什麼是javaweb的MVC分層,二、知道Spring配置IOC是什麼。實踐篇還在修改中,但願儘快發出來,敬請期待~
下面是一些更抽象(至少對於我是。。。)的東西,新手建議瞭解下就能夠了
PS 如今還只接觸了JAX-WS,在實踐篇介紹的demo也是基於JAX-WS的,JAX-RS在學習中,可能在實踐篇2.0會介紹
Java中共有三種WebService規範,分別是
JAX-WS(Java API For XML-WebService)
JAXM&SAAJ(Java API For XML Message)
JAX-RS,是Java針對REST(Representation State Transfer)制定的服務規範
JAX-WS和JAXM&SAAJ都是基於SOAP的web服務,相比之下JAXM&SAAJ暴露了SOAP更多的底層細節,若是想控制SOAP消息的更多細節,可使用;而JAX-WS更加抽象,隱藏了更多的細節,更加面向對象,實現時基本不須要關係SOAP的任何細節。
JAX-RS REST是一種軟件架構模式,不是像SOAP那樣自己承載着一種消息協議。REST中重要的兩個概念就是資源定位和資源操做,而HTTP協議剛好完整的提供了這兩個要點,HTTP協議中的URI能夠完成資源定位,GET、POST、OPTION等方法能夠完成資源操做,所以REST徹底依賴HTTP協議就能夠完成Web服務,而不像SOAP協議那樣只利用HTTP的傳輸特性,定位與操做由SOAP協議自身完成。
看的累了吧,休息下,來個小福利