程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java Web服務進階

Java Web服務進階

編輯:關於JAVA

隨著最近 Sun Microsystems 的 Java Web Services Developers Pack(Java WSDP)版本 1.0 的發布,Java 開發人員現在可以擁有一個方便的、集所有功能於一身的下載包,用來幫助在 Java 平台上開發 Web 服務。Java WSDP 包含 Java XML Pack 中的所有用於 XML 的 Java API(Java APIs for XML(JAX)),還包含有 Apache Tomcat 服務器以及為開發與測試 Web 服務提供一個功能完備的環境所需的其他組件。Java XML Pack 中所有技術,一年前也在 Java WSDP 中公布,並且通過了 Java Community Process(JCP)的所有設計審查要求。

Java WSDP 並不是一個產品,而更傾向於是 Web 服務標准的參考實現,它是一個方便的、易於安裝的包。這個包由一些可以投入生產的實現和幾個應該僅僅用於測試目的的組件組成。所以,Java WSDP 不應是一個用來部署生產應用程序的環境,而更傾向於是一個用來開發和測試 Web 服務的環境;它主要用來幫助 Java 開發人員開始學習使用 Web 服務。Java WSDP 是一個優秀的用於理解、開發與測試 Web 服務的工具;並且,由於它是基於開放標准的,因此當您轉到新的生產環境時並不需要重新開始。

Java WSDP 中有哪些組件?

當安裝 Java WSDP 分發包時,您將創建一個目錄,所有組件都位於這個目錄。缺省情況下,這個目錄包含了一個功能完備的、可以用來開發與測試 Web 服務的服務器環境。Java XML Pack 中包含目前提供的所有用於 XML 的 Java API,並且包含了支持 Web 服務的主要組件。下面是 Java XML Pack 組件的列表以及對這些組件的功能的簡要描述:

用於 XML 處理的 Java API(Java API for XML Processing(JAXP)):JAXP 是一個可插的 API,它對於 W3C 所推薦的 XML API(即 SAX、DOM 和 XSLT)的任意供應商實現都是開放的。JAXP 為獲得 XML 解析器提供了標准接口;最新發布的 Java 平台(Java 2 平台,標准版 SDK v1.4(Java 2 Platform, Standard Edition SDK v1.4),請參閱 參考資料以獲取更多的信息)將 JAXP 作為一個標准接口包括在內。同其他 Java 接口一樣,正在開發的 JAXP 參考實現已被指派給其他團體 ― 在這個例子中,是 Apache Software Foundation。Xerces 2 是 Apache 最新的 XML 解析器,它包括在 Java 2 平台,標准版 SDK v1.4 中。

用於 XML 消息傳遞的 Java API(Java API for XML Messaging(JAXM)):JAXM 旨在使用純 Java API 使應用程序能夠發送與接收面向文檔的 XML 消息。JAXM 的目的是為更高級別的、基於標准的並且基於 SOAP 消息傳遞協議的消息傳遞協議(如 ebXML)提供一個基礎。SAAJ 規范最近從 JAXM 被分離了出來,它包含一個同步的 SOAP 連接,因此 JAXM 現在主要用於異步消息。(我將在下面對 SAAJ 作更加詳盡的討論)。當以異步方式使用 JAXM 時,它使用消息傳遞提供程序來促進消息的路由選擇。JAXM 包括一個消息傳遞提供程序,這個提供程序是 ebXML 傳輸、路由和打包(ebXML Transport, Routing, and Packaging)規范版本 1.0 的參考實現。

用於 Java 的帶有附件的 SOAP API(SOAP with Attachments API for Java(SAAJ)):SAAJ 是一個包,它使開發人員能夠生產並消費那些遵循 SOAP 1.1 規范的消息及其所包含的 SOAP 附件。SAAJ 原先是作為 JAXM 1.0 規范的一部分進行定義的;但隨著最近 JAXM 1.1 的發布,SAAJ 已被分離出來,自成一個規范,這樣其他規范就能夠依靠 SAAJ 包而無需依靠 JAXM。

用於基於 XML 的 RPC 的 Java API(Java API for XML-based RPC(JAX-RPC)):JAX-RPC 是用於支持 SOAP 1.1 基於 XML 的 RPC 調用的實現包。核心 JAX-RPC 包包含一個用於調用 Web 服務的功能完備的 JAX-RPC 客戶機以及 JAX-RPC 服務器的一個參考實現。除了核心包以外,Java WSDP 分發包還包含有許多命令行工具,這些命令行工具用於從 Web 服務定義語言(Web Services Definition Language(WSDL))文件構建客戶機存根,也用於部署服務器組件。

用於 XML 注冊的 Java API(Java API for XML Registries(JAXR)):XML 注冊中心通常用來存儲有關已發布的 Web 服務的信息,而 JAXR API 則提供了訪問這種信息的統一的方法。現在,Web 服務最常用的 XML 注冊中心是統一描述、發現和集成(Universal Description, Discovery, and Integration(UDDI))注冊中心;JAXR 包含一個用於訪問 UDDI 的提供程序。

除了 Java XML Pack 中的包之外,Java WSDP 還包含有一些其他組件,這些組件使其成為用於測試 Web 服務的功能完備的服務器環境。以下便是這些額外組件的清單,這些組件使得 Java WSDP 更加完善:

Tomcat(Java Servlet 和 JavaServer Page 容器):Apache Software Foundation 被委派完成為 Java Servlet 容器(包括 JSP 和 JSTL)創建與維護參考實現的任務。Apache 已經以它慣有的方式制定出了一個優秀的、能與許多商業產品相媲美的開放源代碼解決方案。Java WSDP 與 Apache Tomcat 4.1.2 一起被分發,雖然後者現在只是一個測試發行版,但它是針對 Java Servlet 2.3 和 Java Server Page 1.2 的參考實現版本。在寫本文的時候,來自 Apache 的最新版本是 Tomcat 4.0.4,它也是 Java Servlet 2.3 和 JSP 1.2 的參考實現。

JavaServer Page 標准標記庫(JavaServer Pages Standard Tag Library(JSTL)):JSTL 是一個標記庫,它包含 JavaServer Page(JSP)中常見的許多通用功能。由於 JSTL 使用的只是 JSP 1.2 規范中的功能,所以您將需要一個 JSP 1.2 容器來使用該標記庫。幸運的是,上面描述的 Apache Tomcat Server 恰恰是這樣一個容器,因此您將能夠使用 Java WSDP 來對 JSTL 進行測試或者開發您自己的標記庫。JSTL 的功能太多了,我們無法在此詳細地描述,但是如果您的 JSP 需要訪問數據庫、操作 XML 或執行標准的格式化,那麼您應當考慮使用 JSTL。

注冊中心服務器:注冊中心服務器與 Java WSDP 一起被分發,它是統一描述、發現和集成(UDDI)版本 2 的一個功能完備的實現,可用於測試 Web 服務的注冊與發現。注冊中心服務器與許多其他 WSDP 組件不同,它應只用於測試目的,並因此在包的發布說明中將它列了出來,以免被與任何其他產品一起重新分發。除了這個局限性,注冊中心服務器是學習和測試 UDDI 版本 2 的優秀工具,並且是 Java WSDP 必不可少的部分。

Java WSDP 還提供了許多其他工具,這些工具在 Web 服務存根代碼的構建和 Web 服務服務器端組件的部署與管理中起了幫助作用。下面提到的 Java WSDP 教程向您說明了如何使用這些其他工具。

Java WSDP 各組件間的關系

需要被問到的問題是:所有這些 Java WSDP 組件是如何相互協作以支持 Web 服務的呢?Java WSDP 是經過精心打包的,很容易就可以安裝並運行(假設在 8080 端口上不沖突)。在這一部分中,我將試著解釋這些組件是如何相互協作的,以讓您能夠明白它們之間的關系。通過仔細觀察 圖 1,您會開始明白這些組件之間顯而易見的依賴性。盡管 圖 1並未顯示每一個可能的關系,但它應該能使您理解這些組件是如何相互協作的。這個圖使用簡單的顏色編碼方案來說明有關這些組件的其他信息:

紫色的組件是 Java API for XML(JAX)包的一部分,在 Java XML Pack 中也可以找到它們。大多數 JAX 包都包含可部署的參考實現。

在我看來,青綠色的組件在生產環境中是不可部署的。這些組件的大多數是在生產中將被商業或開放源代碼解決方案所替代的服務器端實現。

黃色用來表示那些由 Apache Software Foundation 維護的組件。在我看來,由於它們在開放源代碼社區中被廣泛使用,所以您可以在生產環境中安全地部署它們。請注意,在本圖中沒有顯示 Xerces 和 Xalan,但它們是與 Java WSDP 一起被分發的。

白色用來表示所生成的代碼、由開發人員在部署過程中提供的數據或瘦客戶機應用程序(例如,Web 浏覽器)。

圖 1. 各組件間的關系

客戶機端組件

這個包的客戶機端組件通常被部署到客戶機應用程序中或者安裝在正在作為客戶機層進行交互的遠程服務器上。基於服務器的客戶機層通常在 JavaServer Page 中被用來與遠程 Web 服務交互。 圖 1 中所示的 Web 浏覽器客戶機便說明了這樣一個體系結構。在這個圖中,基於 JSP 的 Web 應用程序可以使用 JAX-RPC 客戶機存根來與運行在另一個平台(如 Microsoft .Net)上的遠程 Web 服務會話。

從圖中的說明可以清楚地看到,客戶機上的大多數交互作用都將使用 SAAJ,這是由於所涉及到的協議使用了 SOAP 消息傳遞。此外,所有的接口都將使用 JAXP,這是由於它們將在應用程序內部直接解析 XML,或者通過為 JAX-RPC 調用而生成的客戶機存根代碼間接解析 XML。

Java WSDP 中包括的注冊中心浏覽器可以用來定位和創建測試 UDDI 注冊中心中的條目。這個注冊中心浏覽器使用 JAXR API 並通過使用被作為參考實現的一部分提供的 UDDI 綁定獲得一個到注冊中心服務器的連接。由於 UDDI 是一個基於 XML 和 SOAP 的協議,所以,在本示例中,JAXR 使用 SAAJ 進行 SOAP 消息傳遞,並且使用 JAXP 進行 XML 解析。另一個 JAXR 提供程序可能不是基於 SOAP 的,或者它可能有其自己的 SOAP 協議實現並因而將不使用 SAAJ。

當一個 Java 應用程序要使用一個或多個 Web 服務時,在 圖 1中並非顯而易見的另一類型的關系就會發生。對於每一個被使用的 Web 服務來說,開發人員通常獲得所部署的、描述這個 Web 服務的 WSDL 文檔。這個文檔可能已經注冊到了 UDDI 注冊中心;若是如此,理論上開發人員將在開發環境的協助下使用 JAXR 來浏覽 UDDI 注冊中心並獲得這個 Web 服務的 WSDL。一旦獲得了 WSDL,開發工具將生成客戶機存根代碼,這些代碼會被編譯到應用程序中。正在使用這個 Web 服務的客戶機應用程序可能並不知道有個過程調用正在被 JAX-RPC 接口使用 XML 和 SOAP 數據編入到遠程服務器上。

同樣,客戶機應用程序可能需要使用 ebXML 與遠程伙伴應用程序交互。要為與伙伴交互作用作准備,這個應用程序將使用 JAXR 並獲取一個 ebXML 綁定以便可以浏覽 ebXML 注冊中心(Java WSDP 中不提供這個 ebXML 注冊中心)。一旦交換了貿易和伙伴協議(在實際生活中這需要做許多工作),這個應用程序將使用 JAXM 並獲取一個支持 ebXML 的 JAXM 提供程序,然後開始交換消息。

服務器端組件

大多數在客戶機上使用的接口也可以用在服務器上,或者在服務器上有一個使用這些相同接口的參考實現組件。這種情況的一個示例便是 JAX-RPC Servlet。JAX-RPC 調用中的大多數代碼是雙向的,因此,在服務器上使用的相同代碼也可在客戶機上使用。來自客戶機的 JAX-RPC 調用被定向到 JAX-RPC Servlet。JAX-RPC Servlet 使用 SAAJ 的參考實現來處理這個 SOAP 消息,使用 JAX-RPC 的參考實現來對來自 SOAP 主體的方法名稱和參數進行數據編出。一旦這個信息被獲取,特定於服務器的實現代碼必須獲得到被請求方法的接口,並動態地調用這個方法,然後返回結果。從這個方法返回的結果使用相同的 JAX-RPC 和 SAAJ 接口被數據編入回到客戶機。這是服務器端組件使用客戶機端代碼所用的相同的包的一種方法。

由 Java WSDP 提供的服務器端組件通常是不針對生產環境的參考實現。(這些組件在 圖 1中用青綠色表示。)好消息是,所有的 API 都使用良好建立的標准,這些標准大多基於 SOAP 協議。因此,由 Java WSDP 提供的客戶機端代碼可被用來在多種平台上與來自多個供應商的服務器交互。正如前面所描述的那樣,這樣的跨平台功能的普通示例可以是使用 Java 代碼來調用基於 Microsoft .Net 的 Web 服務。

Java WSDP 中包括了另外一些不是 Java XML Pack 的一部分的服務器組件,它們是針對用 Java 平台支持 Web 服務的關鍵技術。Sun Microsystems 與 Apache Software Foundation 合作,生產其許多關鍵技術的健壯的參考實現,這是有充分理由的。在我看來,大多數 Apache 已經開發的標准參考實現是可以供生產使用的。Tomcat Servlet 容器是 Java Servlet 2.3 規范的一個經過充分測試的實現,所附帶的 JSP 1.2 實現也已得到充分使用。它們都應能夠在生產過程中占有一席之地。

結束語

如果您正在嘗試學習如何使用 Java 平台來構建 Web 服務,那麼 Java Web Services Developers Pack 便是一個優秀的、集所有功能於一身的包,它能幫助您入門。在您下載了 Java WSDP 後,請別忘了也把附帶的 Java WSDP 教程下載下來。這個教程包含許多不錯的信息,可以幫您開始您的 Web 服務開發工作。

一旦您理解了 Java XML API 和 Web 服務標准的本質,您便可以開始處理 Web 服務了。Web 服務的主要優點之一是您可以在所選擇的平台上開發服務。如果您選擇使用 Java 平台,您會發現有許多優秀的 Web 服務標准的實現可供選擇。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved