Web服務是一種面向服務的架構技術,經過標準的Web協議提供服務,目的是保證不一樣平臺的應用服務能夠互操做。php
Web Service 是爲其它應用提供數據和服務的應用邏輯單元,應用程序經過標準的Web 協議和數據格式得到Web Service,如HTTP 、XML 和SOAP 等,每一個Web Service 的實現是徹底獨立的。html
簡單地講,Web 服務是一個URL 資源,客戶端能夠經過編程方式請求獲得它的服務,而不須要知道所請求的服務是怎樣實現的,這一點與傳統的分佈式組件對象模型不一樣。java
例如:不少大的站點提供有天氣預報的webservice、查詢某網站的數據的webservice,只要你發送請求過來,它就返回天氣預報、某網站的數據,而後你把結果顯示處來。web
Ø 核心定義:spring
考慮到並沒某個獨立文檔包含一切相關內容,可採用模塊化的方式給出對WEB服務的描述,但不能給出一個「絕對全面和準確」的定義。受外部環境和實現技術影響,各方給出的核心定義可能稍有出入,但一般包括:編程
命名空間:其主要目的經過加一個命名屬性,使名稱保持惟一性。WSDL有大量的使用安全
命名空間的地方。本質上WSDL是一個XML文件,做爲一個XML文件,爲了區別同名的元素,就須要採用命名空間的概念。服務器
SOAP:簡單對象訪問協議,一個基於XML的可擴展消息信封格式,需同時綁定一個傳輸用協議。這個協議一般是HTTP或HTTPS,但也多是SMTP或XMPP,用於網絡上,不一樣平臺,不一樣語言的應用程序間的通信。可自定義,易於擴展。網絡
WSDL:一個XML格式文檔,用以描述服務端口訪問方式和使用協議的細節。一般用來輔助生成服務器和客戶端代碼及配置信息。架構
UDDI:一個用來發布和搜索WEB服務的協議,應用程序可藉由此協議在設計或運行時找到目標WEB服務。
Ø 協議集:
WS安全(WS-Security):定義瞭如何在SOAP中使用XML加密或XML簽名來保護消息傳遞。可做爲HTTPS保護的一種替代或擴充。
WS信賴性(WS-Reliability):一個來自OASIS的標準協議,用來提供可信賴的WEB服務間消息傳遞。
WS可信賴消息(WS-ReliableMessaging):一樣是一個提供信賴消息的協議,由Microsoft, BEA 和IBM發佈。目前OASIS正對其實施標準化工做。
WS尋址(WS-Addressing):定義了在SOAP消息內描述發送/接收方地址的方式。
WS事務(WS-Transaction):定義事務處理方式。
Web Service = SOAP + HTTP + WSDL。其中,SOAP Simple Object Access Protocol)協議是web service的主體,它經過HTTP或者SMTP等應用層協議進行通信,自身使用XML文件來描述程序的函數方法和參數信息,從而完成不一樣主機的異構系統間的計算服務處理。這裏的WSDL(Web Services Description Language)web 服務描述語言也是一個XML文檔,它經過HTTP向公衆發佈,公告客戶端程序關於某個具體的 Web service服務的URL信息、方法的命名,參數,返回值等。
遠程過程調用(RPC):WEB服務提供一個分佈式函數或方法接口供用戶調用,這是一種比較傳統的方式。一般,在WSDL中對RPC接口進行定義(相似於早期的XML-RPC)。
儘管最初的WEB服務普遍採用RPC方式部署,但針對其過於緊密之耦合性的批評聲也隨之不斷。這是由於RPC式WEB服務實質上是利用一個簡單的映射,以把用戶請求直接轉化成爲一個特定語言編寫的函數或方法。現在,多數服務提供商認定此種方式在將來將難有做爲,在他們的推進下,WS-I基本協議集(WS-I Basic Profile)已再也不支持遠程過程調用。
面向服務架構(SOA):如今,業界比較關注的是聽從面向服務架構(Service-oriented architecture,SOA)概念來構築WEB服務。在面向服務架構中,通信由消息驅動,而再也不是某個動做(方法調用)。這種WEB服務也被稱做面向消息的服務。SOA式WEB服務獲得了大部分主要軟件供應商以及業界專家的支持和確定。做爲與RPC方式的最大差異,SOA方式更加關注如何去鏈接服務而不是去特定某個實現的細節。WSDL定義了聯絡服務的必要內容。
表述性狀態轉移(REST):表述性狀態轉移式(Representational state transfer,REST)WEB服務相似於HTTP或其餘相似協議,它們把接口限定在一組廣爲人知的標準動做中(好比HTTP的GET、PUT、DELETE)以供調用。此類WEB服務關注與那些穩定的資源的互動,而不是消息或動做。此種服務能夠經過WSDL來描述SOAP消息內容,經過HTTP限定動做接口;或者徹底在SOAP中對動做進行抽象。
Ø 可操做的的分佈式應用程序;
Ø 廣泛性、使用HTTP和XML進行通訊;
Ø Web Service 甚至能夠穿越防火牆,真正的自由通訊;
Ø 經過 SOAP 協議實現異地調用;
Ø Service 組件易複用,易集成;
Web 服務有兩層含義:1、是指封裝成單個實體併發布到網絡上的功能集合體;2、是指功能集合體被調用後所提供的服務。
Web 服務的體系結構是基於Web 服務提供者、Web 服務請求者、Web 服務中介者三個角色和發佈、發現、綁定三個動做構建的。簡單地說,Web 服務提供者就是Web 服務的擁有者,它耐心等待爲其餘服務和用戶提供本身已有的功能;Web 服務請求者就是Web 服務功能的使用者,它利用SOAP 消息向Web 服務提供者發送請求以得到服務;Web 服務中介者的做用是把一個Web 服務請求者與合適的Web 服務提供者聯繫在一塊兒,它充當管理者的角色,通常是UDDI 。這三個角色是根據邏輯關係劃分的,在實際應用中,角色之間極可能有交叉:一個Web 服務既能夠是Web 服務提供者,也能夠是Web 服務請求者,或者兩者兼而有之。顯示了Web 服務角色之間的關係: 其中,「發佈」是爲了讓用戶或其餘服務知道某個Web 服務的存在和相關信息; 「查找(發現)」是爲了找到合適的Web 服務; 「綁定」則是在提供者與請求者之間創建某種聯繫。
◆ Web 服務提供者設計實現Web 服務,並將調試正確後的Web 服務經過Web 服務中介者發佈,並在UDDI 註冊中心註冊 ; (發佈)
◆ Web 服務請求者向Web 服務中介者請求特定的服務,中介者根據請求查詢 UDDI 註冊中心,爲請求者尋找知足請求的服務; (發現)
◆ Web 服務中介者向Web 服務請求者返回知足條件的Web 服務描述信息,該描述信息用WSDL 寫成,各類支持Web 服務的機器都能閱讀;(發現)
◆ 利用從Web 服務中介者返回的描述信息生成相應的SOAP 消息,發送給Web 服務提供者,以實現Web 服務的調用;(綁定)
◆ Web 服務提供者按SOAP 消息執行相應的Web 服務,並將服務結果返回給Web 服務請求者。(綁定)
JWS是Java語言對WebService服務的一種實現,用來開發和發佈服務。而從服務自己的角度來看JWS服務是沒有語言界限的。只是Java語言爲Java開發者提供便捷發佈和調用WebService服務的一種途徑。
詳情見URL:
Ø JWS開發WebService:
http://www.iteye.com/topic/166314
Axis2是Apache下的一個重量級WebService框架,準確說它是一個Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能製做和發佈WebService,並且能夠生成Java和其餘語言版WebService客戶端和服務端代碼。這是它的優點所在。可是,這也不可避免的致使了Axis2的複雜性,使用過的開發者都知道,它所依賴的包數量和大小都是很驚人的,打包部署發佈都比較麻煩,不能很好的與現有應用整合爲一體。可是若是你要開發Java以外別的語言客戶端,Axis2提供的豐富工具將是你不二的選擇。
詳情見URL:
Ø Axis2系列教程:
http://www.blogjava.net/nokiaguy/archive/2009/01/02/249556.html
http://www.cnblogs.com/mingzi/archive/2009/03/09/1406839.html
XFire是一個高性能的WebService框架,在Java6以前,它的知名度甚至超過了Apache的Axis2,XFire的優勢是開發方便,與現有的Web整合很好,能夠融爲一體,而且開發也很方便。可是對Java以外的語言,沒有提供相關的代碼工具。XFire後來被Apache收購了,緣由是它太優秀了,收購後,隨着Java6 JWS的興起,開源的WebService引擎已經再也不被看好,漸漸的都敗落了。
詳情見URL:
Ø XFire 開發WebService :
http://www.doc88.com/p-59359114924.html
Ø XFire集成Spring開發WebService :
http://txswjhd.blog.163.com/blog/static/42232682200781825429353/
CXF是Apache旗下一個重磅的SOA簡易框架,它實現了ESB(企業服務總線)。CXF來自於XFire項目,通過改造後造成的,就像目前的Struts2來自WebWork同樣。能夠看出XFire的命運會和WebWork的命運同樣,最終會淡出人們的視線。CXF不可是一個優秀的Web Services / SOAP / WSDL 引擎,也是一個不錯的ESB總線,爲SOA的實施提供了一種選擇方案,固然他不是最好的,它僅僅實現了SOA架構的一部分。
詳情見URL:
Ø CXF 開發WebService :
http://hi.baidu.com/cpuhandou/blog/item/597dde17546ed915972b4317.html
Ø CXF 集成Spring 開發WebService :
http://tonyaction.blog.51cto.com/227462/202754
http://www.ibm.com/developerworks/cn/webservices/ws-pojo-springcxf/
Spring web services(如下簡稱:Spring WS)框架是基於契約先行(contract first),Springframework東家SpringSource公司旗下的一個子項目。
Spring Web Services框架的特色:
Ø Spring框架的支持,你能夠重用Spring的全部特性。
Ø Spring WS使用Contract First(自頂向下)的設計方式。Spring WS不支持Contract Last(自底向上)。
Ø 支持幾乎全部的XML API,處理傳入XML消息的時候就不限於JAX-P,能夠是任意的XML API,選擇你所擅長的。
Ø 靈活的XML Marshalling,Object/XML mapping產品的支持,包括JAX-B1,2,XMLBean以及Castor等等。
Ø Security支持,集成了Acegi.實現web services 認證。
詳情見URL:
Ø Spring Web Service 開發:
http://www.iteye.com/topic/152556
http://arronzhen.iteye.com/blog/794482
http://www.blogjava.net/liuzheng/articles/170363.html
Web Service 的SOAP儘管是一種標準的傳輸協議,可是它畢竟是一種特殊的協議,一種特殊的技術,並不支持其它的傳輸協議,如RMI等,因此Web Service 仍是和特定的SOAP技術綁定在一塊兒的。 經過了解IT和程序語言的發展歷史,能夠獲得這樣的一個結果,SOA是爲了信息集成,而出現的一種新事物,它顯然是超越的現有的一切技術,可是它又包含了全部的技術。SOA達到的一個目的就是面向服務,而這種面向服務的結果就是忽略任何與技術有關的東西,最終提供的都是服務接口。
其實咱們還應該搞清楚面向對象和麪向組件之間的區別,面向組件和麪向服務的區別,SOA和web service之間的區別?
面向服務和麪向組件的區別在於面向組件須要和傳輸協議及應用服務器的端口綁定,面向服務就是要進一步對面向組件解耦,所謂解耦就是將業務組件和傳輸協議的端口解耦,既各類業務組件能夠自由的綁定各類傳輸協議。 SOA和web service之間的區別是SOA是在web Service的基礎上發展起來的,web service實現了鬆散耦合的服務和粗粒度的服務,可是web service本質上只是一個服務組件,它雖然採用的標準的協議,可是它是與應用服務器緊密相關的。
因此能夠得出結論:SOA自己並不是什麼具體的技術,也不是什麼架構,它是一種思想,它超越了現有的技術和架構,可是它又包含了現有技術和架構。運用這種思想要到達的目的就是作到業務和技術的徹底分離,作到敏捷的、不受限制的信息集成。
對於SOA,可舉如下例子:
有人說英語,有人說漢語,還有人說法語...,Web Service說,這不利於集成..你們都來講"世界語"—SOAP,SOA說,世界語仍是語言,和特定表達方式綁定了;咱們最終要作到,你們都使用腦電波交流,最終要作到語言和表達徹底分離,作到敏捷的、不受限制的信息集成。
SOAP -- Simple Object Access Protocol
WSDL -- Web Service Description Language
UDDI -- Universal Description Discovery &Integration
JAXP -- THE Java API for XML Processing
SAX -- Simple API for XML Parsing
DOM -- Document Object Model
SAX -- The Simple API for XML
XSLT -- THE XML Stylesheet Language for Transformations
JAXB -- THE Java Architecture for XML Binding
JAX-RPC -- Java API for XML-base RPC
RPC -- Romote Procedure Calls
JAXR -- THE Java API for XML Registries
Java WSDP -- Java Web Services Developer Pack
JAX-WS -- Stands for Java API for XML Web Services