在JAVA EE應用程序中實現Web Service服務(一)基礎理論

前言

本系列主要講解面向服務的架構(SOA)和Web服務的必要性。同時介紹基於XML和RESTful這兩種類型的Web服務。同時涵蓋了如何創建和具體的使用。

技術使用背景

隨着通過Web進行商業交易的急劇增長和被越來越多的人接受,越來越多的企業正在實現Web服務解決方案。Web服務是根據現有的行業標準(例如WSDL、SOAP和HTTP)構建的,它們使得完全不同的是應用程序能夠集成在一起作爲一個大型軟件系統的組成部分來協同工作。

情景模擬

例如,我們現在想要開發一個大型線上圖書交易平臺,想具備以下功能:

  1. 在線提供各出版社的圖書
  2. 支持圖書的在線訂購和付款
  3. 向客戶交付圖書

針對以上的功能需求,我們可以分析出,當前的圖書交易平臺是無法獨立完整這種功能實現的。比如需求1,想要提供各出版社的圖書,就需要從有合作關係的出版社那裏獲取到所有圖書的信息(書名、作者、類型、出版日期、更新版本、出版社等),這些信息完全可以由具體的出版社來爲我們提供。對於需求2,我們在確定用戶購買以後,需要給出在線支付工具來收款,至於這個功能,已經由各大銀行或則第三方支付平臺爲我們實現了,我們只需要向他們請求使用即可,沒有必要自己開發一套支付系統,因爲我們的核心業務是在圖書交易。關於需求3,當用戶完成交易後,我們需要將圖書發送給客戶,那一定需要快遞,目前市面上的快遞公司多種多樣,我們需要與幾家靠譜的快遞公司建立合作關係,並長期依賴它們爲我們送達圖書到客戶手上,那麼客戶的圖書收取地址、聯繫電話、個人信息等配送信息,我們就需要提供給快遞公司,同時快遞公司也需要將客戶的快遞狀態反饋給我們,以便於用戶在我們的平臺上查看自己的圖書送到了哪裏。

定義SOA

SOA代表Service-Oriented Architecture(面向服務的架構)。它是有利於在不同應用程序間實現鬆散耦合繼承的軟件架構。此外,此架構還提供在軟件及其網絡組件中進行更改的靈活性。這些更改不會英雄體統的其他現有組件的使用。換句話說,該架構具有可重用性,恰恰源於可重用性的功能,可以幫助我們的開發減少成本支出,合理的使用其他組織的系統的組件來爲我們服務。

介紹Web Service(服務)

SOA的概念是通過使用Web Service來實現的。Web Service可以讓我們輕鬆有效的構建現有Web應用程序,它允許應用程序之間跨平臺通信。同時,允許一個應用程序使用其他的應用程序的功能。
舉一些簡單的生活例子,我們在購物網站購物時的支付系統,其實並不是網站本身自己開發,而是間接使用了銀行或者第三方支付平臺來幫助自己完成收款的功能需求;當我們在某個頁面上看到氣象預報的時候,並不是那個平臺自己每天派人盯着藍天白雲,分析近期有沒有雨,也不是手拿溫度計,自己實時的記錄當前的溫度,而是有專門的氣象局的專業人士進行統計和預測,那些頁面只是間接使用了氣象局提供的數據展示在了自己的頁面上;又比如,我們每次註冊賬號,都需要手機驗證,手機驗證就需要發送短信,每個平臺在用戶註冊發送手機驗證碼時,並不是自己的團隊開發了一套發送短信的系統,而是間接使用了通信公司的短信發送功能,來實現自己的業務需求。
這樣的例子數不勝數,其實就是我們在自己的軟件系統開發過程中,有一些業務可能與我們的核心業務不太沾邊,但是又不得不用,那這時,就有專門的團隊事先已經爲我們開發好了具體的功能模塊,我們只需要按照它們的要求,借用他們的系統進行處理即可。

Web Service 的功能

Web Service是執行特定任務或一組任務的一種應用程序功能。同時,Web Service可以通過網絡發佈、查找或調用。具有如下功能:

  1. 支持數據交換: Web服務使用XML數據格式完成Web服務間的信息交換,信息交換基於XML消息的形式完成。XML是獨立於供應商和平臺的語言,可以用在企業內甚至跨企業提供跨平臺數據集成。
    通俗的來說,就是我們想要使用別人開發的軟件系統,就需要訪問到別人的系統,別人的系統可能也是用Java寫的,但還可能是C# / .net / C / Python等其他編程語言寫的,那這直接導致我們的語言無法溝通,使用XML便解決了這種問題。
  2. 支持文檔交換: Web服務通過將文檔附加在業務之間交換的XML消息上來支持大型非XML文檔的交換。此類非XML文檔可以是PDF文件、視頻文件或者圖像文件。
  3. 支持同步和異步客戶端: Web服務支持與客戶端進行同步和異步通信。同步客戶端是指等待當前的服務完成後,再直接接下來的其他操作。異步客戶端始值調用服務,然後繼續執行接下來的其他函數,而不是等待着這個服務的完成。
Web Service 的好處
  1. 支持應用程序和數據集成。Web服務使用獨立於供應商平臺和語言的XML技術以及通信協議(如HTTP)作爲傳輸方式。
  2. 多功能。可將多個Web服務的數據組合在一起,以執行特定任務或者顯示不同的內容給用戶。
  3. 代碼可重用性。不用多解釋,一個服務可用於多個客戶端,比如一個支付功能,寫一遍,所有的調用者都是執行同樣的代碼。不需要針對每一個調用者,創建新的代碼。
  4. 節約成本。這個也是顯而易見的,我們的開發過程中,不再需要自己去完成一些基礎而與核心業務關聯性低的功能,直接使用供應商提供的功能系統。

Web Service 應用編程接口(API)

Java Web Service是使用JWSDP工具包開發的。主要提供以下API:

  1. 用於XML Web服務的Java API(JAX-WS) :JAX-WS用於開發基於XML的Web服務。它是用於構建通過使用XML進行通信的Web服務和客戶端的技術。
  2. 用於XML處理的Java API(JAXP):JAXP用於處理來自Java應用程序的XML數據。例如:我們的Web服務接收到了一條XML的消息,其中包含了用戶的個人信息和消息報頭信息。我們可以使用JAXP API來從消息中抽取出用戶的個人詳細信息。
  3. 用於XML綁定的Java架構(JAXB):JAXB允許我們將XML文檔映射到Java對象,反之亦然。
  4. SOAP with Attachments API for Java(SAAJ): SAAJ用於將大型文件作爲SOAP消息的附件通過因特網來傳輸。例如:我們需要向客戶端發送非XML數據的大型文檔,那麼就需要使用SAAJ API來將文檔附加到SOAP消息中。
  5. 用於XML註冊表的Java API(JAXP):JAXP提供了標準的Java API以訪問不同的Web服務註冊表。它使得Web服務客戶端能夠通過網絡來訪問這些標準註冊表以獲取已發佈的Web服務。例如:我們需要查詢最新的天氣預報,那麼我需要通過使用JAXR API訪問那個提供天氣預報供應商的系統註冊表來查找提供天氣預報的Web服務。

Web 服務的類型

Web服務就兩種類型:

  1. 基於XML的Web服務
  2. RESTful Web服務
基於XML的Web服務的組件

基於XML的Web服務是向使用者公開其功能的自我描述Web組件。要訪問此類公開功能,需要通過某些開放標準描述、註冊基於XML的Web服務並與之通信。此類開放標準也稱爲基於XML的Web服務組件,包括:

  1. WSDL:基於XML的文檔,用於描述基於XML的Web服務的功能
    用來描述Web服務(Web Service)和說明如何與Web服務通信的XML語言。由於是 基於XML的,所以WSDL具有非常好的可閱讀性。

  2. UDDI:基於XML的目錄服務,用於註冊基於XML的Web服務
    通用描述、發現及整合,用來管理、分發、查詢webService;用戶自己可以按UDDI 標準搭建UDDI服務器,來管理,分發,查詢WebService ,其他用戶可以自己註冊發佈 WebService;

  3. SOAP:基於XML的協議,用於在應用程序間交換信息。它使用HTTP協議進行數據傳輸,優點如下:

  • 一種輕量級通信協議;
  • 用於應用程序之間的通信;
  • 使用HTTP協議通信;
  • SOAP獨立於平臺、獨立於編程語言、基於XML,簡單並可擴展;

Java的web service規範

JAX-WS規範
  • 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版本。
  • 採用標準SOAP(Simple Object Access Protocol) 協議傳輸,SOAP協議是基於http的 應用層協議,SOAP協議傳輸的是xml數據。
  • 採用wsdl作爲描述語言即webservice使用說明書。
  • 採用wsdl作爲描述語言(WSDL可以認爲是web service使用說明書)。
基本介紹

JAX-WS庫是爲程序員提供批註(註解)集合和工具包來發開基於XML的Web服務。批註和工具包隱藏構建Web服務的複雜性,還減少jar文件的大小。JAX-WS API支持多種協議,例如 SOAP 1.1 、SOAP 1.2、 XML 和 HTTP。此外,消息傳輸優化機制(MTOM)支持已在JAX-WS API中啓用。MTOM是一種新型附件規範,能夠以壓縮格式將大二進制數據作爲附件隨SOAP消息發送。
通過使用JAX-WS API,Web服務和客戶端通過交換SOAP消息以進行通信。JAX-WS API 自己生成或者解析SOAP消息。JAX-WS的運行系統將API調用和響應轉換成SOAP消息或者從SOAP消息進行轉換。
下圖顯示了JAX-WS Web服務和客戶端之間使用SOAP消息進行的通信。
JAX-WS Web 服務和客戶端之間使用SOAP消息進行的通信

JAX-WS API

JAX-WS API通過提供批註支持簡化了Web服務的開發。批註是可應用於以下Java元素的一類修飾符:

  • 諸如Java類或接口值類的類型
  • 方法
  • 表示Java類中的本地實例變量的字段
  • Java方法內的參數

JAX-WS API支持批註以提供帶有元素數據的Java類,從而限定其行爲並指示Java類是Web服務。

JAX-WS API提供的一些批註(註解)
批註 描述
@WebService 此批註將類定義爲Web服務接口的實現類。在此類中定義的方法對客戶端公開。
@WebMethod 此批註定義該方法是Web服務方法。此批註應用到類中的方法。@WebMethod批註僅受具有@WebService批註的那些類支持。
@OneWay 此批註定義Web方法具有輸入但沒有輸出。僅可對沒有返回類型的方法指定它。
@WebParam 此批註定義Web服務中所使用方法的參數。
@WebServiceRef 此批註定義Web服務的引用。

JAX-WS API 在 javax.xml.ws 包中定義。下表描述了 javax.xml.ws 包中支持基於 SOAP的應用程序開發的包。

描述
javax.xml.ws.handler 它爲消息處理程序定義API
javax.xml.ws.handler.soap 它爲SOAP消息處理程序定義API
javax.xml.ws.http 它定義特定於HTTP綁定的API
javax.xml.ws.soap 它定義特定於SOAP綁定的API
javax.xml.ws.spi 它爲JAX-WS定義服務提供程序接口
javax.xml.ws.wsaddressing 它定義與WS尋址相關的API

JAX-RS規範

JAX-RS是JAVA 針對REST(Representation State Transfer)風格制定的一套Web 服務 規範,由於推出的較晚,該規範(JSR 311,目前JAX-RS 的版本爲1.0)並未隨JDK1.6 一 起發行。
支持JAX-RS服務規範的框架有:

  • CXF—XFire和Celtix的合併。
  • Jersey—Sun公司的JAX-RS參考實現。
  • RESTEasy—JBoss的JAX-RS項目。
  • Restlet—也許是最早的REST框架了,它JAX-RS之前就有了。

JAX-RS API

JAX-RS API 提供基於REST樣式架構創建Web服務的支持。此API與簡單的Java對象一起使用,以通過使用URI模式和HTTP方法提供對齊方法的訪問。

發佈了14 篇原創文章 · 獲贊 3 · 訪問量 2095
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章