WebService技術詳解 轉

No.1 什麼是WebService

WebService技術,能使得運行在不同機器上的不同應用無須藉助附加的、專門的第三方軟件或硬件,就可相互交換數據或集成。

依據WebService規範實施的應用之間,無論它們所使用的語言、平臺或內部協議是什麼,都可以相互交換數據。

WebService就是一個應用程序向外界暴露出一個能通過Web進行調用的API,也就是說能用編程的方法通過Web來調用這個應用程序

WebService是建立可互操作的分佈式應用程序的新平臺,是一個平臺,是一套標準。

WebService平臺需要一套協議來實現分佈式應用程序的創建。

WebService是一種跨編程語言和跨操作系統平臺的遠程調用技術。

No.2 WebService技術原理

XML+XSD,SOAPWSDL就是構成WebService平臺的三大技術。

2.1、XML+XSD

WebService採用HTTP協議傳輸數據,採用XML格式封裝數據(即XML中說明調用遠程服務對象的哪個方法,傳遞的參數是什麼,以及服務對象的返回結果是什麼)。

XMLWebService平臺中表示數據的格式。

XML除了易於建立和易於分析外,其主要的優點在於它既是平臺無關的,又是廠商無關的。

XML解決了數據表示的問題,但它沒有定義一套標準的數據類型,更沒有說怎麼去擴展這套數據類型。

XML Schema(XSD)定義了一套標準的數據類型,並給出了一種語言來擴展這套數據類型。WebService平臺就是用XSD來作爲其數據類型系統的。

2.2、SOAP

WebService通過HTTP協議發送請求和接收結果時,發送的請求內容和結果內容都採用XML格式封裝,並增加了一些特定的HTTP消息頭,以說明HTTP消息的內容格式,這些特定的HTTP消息頭和XML內容格式就是SOAP協議。

SOAP提供了標準的RPC方法來調用WebService

SOAP協議 = HTTP協議 + XML數據格式

SOAP協議定義了SOAP消息的格式,SOAP協議是基於HTTP協議的,SOAP也是基於XMLXSD的,XMLSOAP的數據編碼方式。

2.3、WSDL

WebService客戶端要調用一個WebService服務,首先要有知道這個服務的地址在哪,以及這個服務裏有什麼方法可以調用,所以WebService務器端首先要通過一個WSDL文件來說明自己提供哪些服務可以對外調用,服務是什麼(服務中有哪些方法,方法接受的參數是什麼,返回值是什麼),服務的網絡地址用哪個url地址表示,服務通過什麼方式來調用。

WSDL(Web Services Description Language)是一個基於XML的語言,用於描述WebService及其函數、參數和返回值。它是WebService客戶端和服務器端都能理解的標準格式。

WSDL文件保存在Web服務器上,通過一個url地址就可以訪問到它。

客戶端要調用一個WebService服務之前,要知道該服務的WSDL文件的地址。

WebService服務提供商可以通過兩種方式來暴露它的WSDL文件地址:

1.註冊到UDDI服務器,以便被人查找;

2.直接告訴給客戶端調用者。

No.3 WebService實現方式

WebService的三種常用實現方式有:

RPC:遠程過程調用方式(面向方法)

SOA:面向服務的方式(面向消息)

RESTRepresentational state transfer表述性狀態轉移(面向資源)

3.1、Apache Axis2 技術

Axis2是一套嶄新的WebService引擎,該版本是對Axis1.x重新設計的產物。Axis2不僅支持SOAP1.1SOAP1.2,還集成了非常流行的REST WebService,同時還支持SpringJSON等技術。

這些都將在後面的系列教程中講解。在本文中主要介紹瞭如何使用Axis2開發一個不需要任何配置文件的WebService,並在客戶端使用JavaC#調用這個WebService

3.2、Apache CXF框架

Apache CXF 是一個開源的Services框架,CXF幫助您來構建和開發Services,這些Services可以支持多種協議,比如:SOAP、POST/HTTP、RESTful HTTP CXF 大大簡化了Service可以天然地和Spring進行無縫集成。

CxFCeltrixESB框架)和XFirewebserivice) 合併而成,並且捐給了apache

CxF的核心是org.apache.cxf.Bus(總線),類似於SpringApplicationContext

CXF默認是依賴於Spring的。

Apache CXF發行包中的jar,如果全部放到lib中,需要JDK1.6 及以上,否則會報JAX-WS版本不一致的問題。

CXF內置了Jetty服務器,它是servlet容器,好比tomcat

CXF特點

Spring、Servlet做了無縫對接,cxf框架裏面集成了Servlet容器Jetty

支持註解的方式來發布WebService

能夠顯示一個WebService的服務列表

能夠添加攔截器:輸入攔截器、輸出攔截器:

輸入日誌信息攔截器、輸出日誌攔截器、用戶權限認證的攔截器

CXF與Spring集成

建立一個web項目。

準備所有jar包,將CXF_HOMElib項目下的所有jar包,全部都拷貝新項目的lib目錄下.其中裏面已經包含了Sring3.0jar包,其中jetty服務器的包可以不要,因爲我們可以部署在tomcat服務器中。

web.xml中配置cxf的核心servlet,CXFServlet

此配置文件的作用類攔截/ws/*的所有請求,類似Struts2的過濾器。

@WebService 標記表示該接口是一個WebService服務

@WebMethod 表示表示以下方法爲WebService服務中的方法,exclude=true表示該方法不被髮布出去

@WebParam 表示方法中的參數

示例程序:

新建一個maven工程

添加依賴

編寫實體類

編寫服務接口

編寫服務接口實現類

編寫spring的配置

編寫web.xml的配置

瀏覽器訪問

結果

出現如下結果,則表明服務發佈成功。

3.3、Jersey

Jersey RESTful WebService框架是一個開源的、產品級別的JAVA框架,支持JAX-RS API並且是一個JAX-RS(JSR 311JSR 339)的參考實現。

Jersey不僅僅是一個JAX-RS的參考實現,Jersey提供自己的API,其API繼承自JAX-RS,提供更多的特性和功能以進一步簡化RESTful service和客戶端的開發。

@Path 用來爲資源類或方法定義URI,當然除了靜態URI也支持動態URI

@PathParam 用來將請求URI的一部分作爲方法參數傳入方法中,對URI的動態部分,可以自定義校驗正則表達式,如果請求參數校驗失敗,容器返回404 Not Found

@GET 表明被註解的方法響應HTTP GET請求,@POST@PUT@DELETE同理

@Consumes 定義請求的媒體類型,如果不指定,則容器默認可接受任意媒體類型,容器負責確認被調用的方法可接受HTTP請求的媒體類型,否則返回415 Unsupported Media Type

@Produces 定義響應媒體類型,如果不指定,則容器默認可接受任意媒體類型,容器負責確認被調用的方法可返回HTTP請求可以接受媒體類型,否則返回406 Not Acceptable

@QueryParam 用來指定方法的參數。

@Context 將信息注入請求或響應相關的類,可注入的類有:ApplicationUriInfoRequestHttpHeadersSecurityContext

@Singleton 和 @PerRequest 默認情況下,資源類的生命週期是per-request,也就是系統會爲每個匹配資源類URI的請求創建一個實例,這樣的效率很低,可以對資源類使用@Singleton註解,這樣在應用範圍內,只會創建資源類的一個實例

示例程序:

新建一個maven工程

添加依賴

編寫對外服務類

編寫一個測試啓動類

在瀏覽器中訪問:

服務端打印信息:

說明:

一般情況下,我們會建一個web項目並在web.xml文件中配置一個servlet容器來處理請求,具體如下:

No.4 適用場景

1、跨防火牆通信

如果應用程序有成千上萬的用戶,而且分佈在世界各地,那麼客戶端和服務器之間的通信將是一個棘手的問題。因爲客戶端和服務器之間通常會有防火牆或者代理服 務器。在這種情況下,使用DCOM就不是那麼簡單,通常也不便於把客戶端程序發佈到數量如此龐大的每一個用戶手中。傳統的做法是,選擇用瀏覽器作爲客戶 端,寫下一大堆ASP頁面,把應用程序的中間層暴露給最終用戶。這樣做的結果是開發難度大,程序很難維護。如果中間層組件換成WebService的話, 就可以從用戶界面直接調用中間層組件。從大多數人的經驗來看,在一個用戶界面和中間層有較多交互的應用程序中,使用WebService這種結構,可以節 省花在用戶界面編程上20%的開發時間。

2、應用程序集成

企業級的應用程序開發者都知道,企業裏經常都要把用不同語言寫成的、在不同平臺上運行的各種程序集成起來,而這種集成將花費很大的開發力量。應用程序經常 需要從運行在IBM主機上的程序中獲取數據;或者把數據發送到主機或UNIX應用程序中去。即使在同一個平臺上,不同軟件廠商生產的各種軟件也常常需要集成起來。通過WebService,可以很容易的集成不同結構的應用程序。

3、B2B集成

WebService集成應用程序,可以使公司內部的商務處理更加自動化。跨公司的商務交易集成通常叫做B2B集成。WebServiceB2B集成成功的關鍵。

通過WebService,公司可以把關鍵的商務應用“暴露”給指定的供應商和客戶。例如,把電子下單系統和電子票系統“暴露”出來,客戶就可以以電子的方式發送訂單,供應商則可以以電子的方式發送原料採購票。WebService只是B2B集成的一個關鍵部分,還需要許多其它的部分才能實現集成。

WebService來實現B2B集成的最大好處在於可以輕易實現互操作性。只要把商務邏輯“暴露”出來,成爲WebService,就可以讓任何指定 的合作伙伴調用這些商務邏輯,而不管他們的系統在什麼平臺上運行,使用什麼開發語言。這樣就大大減少了花在B2B集成上的時間和成本,讓許多原本無法承受EDI的中小企業也能實現B2B集成。

4、軟件和數據重用

軟件重用是一個很大的主題,重用的形式很多,重用的程度有大有小。最基本的形式是源代碼模塊或者類一級的重用,一種形式是二進制形式的組件重用。

採用WebService應用程序可以用標準的方法把功能和數據“暴露”出來,供其它應用程序使用,達到業務級重用。

·end·

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章