Java webservice


webservice:

    就是應用程序之間跨語言的調用
    1.xml
    2.    wsdl: webservice description language web服務描述語言
        通過xml格式說明調用的地址方法如何調用,可以看錯webservice的說明書
    
    3.soap simple object access protoacl (簡單對象訪問協議) 
        限定了xml的格式
        soap 在http(因為有請求體,所以必須是post請求)的基礎上傳輸xml數據
            請求和響應的xml 的格式如:    <Envelop>
                                <body>
                                //....
                                </body>
                            </Envelop>
                operation name:服務提供的方法
                
        
    靜態方法不能發布為外部服務
    
    運用jkd自帶的代碼生成訪問服務器的客戶端代碼    E:/wsimort -s . http://test.cm/?wsdl
    
    我們可以把webservice看做是web服務器上的一個應用,web服務器是webservice的一個容器
    
    函數的參數在 http://test.cm/?xsd=1
    
    JAX-WS是指 java api for xml -WebService
    
    //測試 WebService服務的 explorer
    Web Service Explorer 可以顯示返回的xml格式
    
    targetNamespace 默認為倒置的包名
    
客戶端調用WebService的方式:
    1.通過wximport生成代碼
    2.通過客戶端編程方式
    3.通過ajax調用方式
    4.通過 URL Connection 方式調用


請求過程分析:
        1.使用get方式獲取wsdl文件,稱為握手
        2.使用post發出請求
        3.服務器響應成功過


幾種監聽工具:
    http watch
    Web Service explorer
    eclipse 自帶工具   TCP/IP Monitor

 

在講Web Service開發服務時,需要介紹一個目前開發Web Service的幾個框架,分別為Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,這是Java6發布所提供的對Web Service服務的一種實現。)前面幾項都為開源項目,而其中又以axis2與cxf所最為常用,Axis與XFire已隨着技術不斷的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis與XFire都已不再更新。


下面就分別介紹下這幾個框架之間的區別,以便大家進行更好的選擇:
XFire是與Axis2 並列的新一代WebService平台。之所以並稱為新一代,因為它: 
1、支持一系列Web Service的新標准--JSR181、WSDL2.0 、JAXB2、WS-Security等; 
2、使用Stax解釋XML,性能有了質的提高。XFire采用Woodstox 作Stax實現; 
3、容易上手,可以方便快速地從pojo發布服務; 
4、Spring的結合; 
5、靈活的Binding機制,包括默認的Aegis,xmlbeans,jaxb2,castor。

XFire與Axis1性能的比較 
1、XFire比Axis1.3快2-6倍 
2、XFire的響應時間是Axis1.3的1/2到1/5


XFire與Axis2的比較 
雖然XFire與Axis2都是新一代的WebService平台,但是Axis2的開發者太急於推出1.0版本,所以1.0還不是一個穩定的版本,它的開發者宣稱1.1版本即將推出,希望1.1版本會是個穩定的版本。在XFire捐獻給apache后有人認為Axis2將會滅亡。其實在很多人眼里,Axis2並不是pojo形式,Dan Diephouse證明了XFire比Axis更有市場,我也發現了有很多人開始從Axis轉向XFire,包括我也在說服身邊的人轉向利用XFire進行WebService的開發,很典型的是我可以在幾分鍾之內教會我的團隊實用XFire來發布一個他自己的Web服務。
本人傾向於XFire確實比Axis2簡單很多。


AXIS VS CXF
在SOA領域,我們認為Web Service是SOA體系的構建單元(building block)。對於服務開發人員來說,AXIS和CXF一定都不會陌生。這兩個產品都是Apache孵化器下面的Web Service開源開發工具。
本文發布時Axis的最新版本是1.4;CXF現在已經到了3.0版本。
這兩個框架 都是從已有的開源項目發展起來的。Axis2是從Axis1.x系列發展而來。而CXF則是XFire和Celtix項目的結合產品。Axis2是從底層全部重新實現,使用了新的擴展性更好模塊架構。 CXF也重新的深化了XFire和Celtix這兩個開發工具。


比較這兩個框架的Web Service開發方法與比較它們的特性同樣重要。
        從開發者的角度,兩個框架的特性相當的不同。 Axis2的開發方式類似一個小型的應用服務器,Axis2的開發包要以WAR的形式部署到Servlet容器中,比如Tomcat,通過這些容器可以對工作中的Web Service進行很好的監控和管理。Axis2的Web administrion模塊可以讓我們動態的配置Axis2.一個新的服務可以上載,激活,使之失效,修改web服務的參數。管理UI也可以管理一個或者多個處於運行狀態的服務。這種界面化管理方式的一個弊端是所有在運行時修改的參數沒有辦法保存,因為在重啟動之后,你所做的修改就會全部失效。Axis2允許自己作為獨立的應用來發布Web Service,並提供了大量的功能和一個很好的模型,這個模型可以通過它本身的架構(modular architecture)不斷添加新的功能。有些開發人員認為這種方式對於他們的需求太過於繁瑣,從而會更喜歡CXF。


  CXF更注重開發人員的工效(ergonomics)和嵌入能力(embeddability)。大多數都可以通過配置API來完成,替代了比較繁瑣的XML配置文件, Spring的集成性經常的被提及,CXF支持Spring2.0和CXF's API和Spring的配置文件可以非常好的對應。CXF強調代碼優先的設計方式(code-first design),使用了簡單的API使得從現有的應用開發服務變得方便。


不過你選擇Axis2還是CXF,你都可以從開源社區得到大量的幫助。這兩個框架都有商業公司提供服務,WSO2提供AXIS2的支持,Iona提供CXF的支持。這兩公司都有很活躍的開發者社區。


下面分別介紹一個這幾種Web Service框架的基本概念
1、JWS是Java語言對WebService服務的一種實現,用來開發和發布服務。而從服務本身的角度來看JWS服務是沒有語言界限的。但是Java語言為Java開發者提供便捷發布和調用WebService服務的一種途徑。

2、Axis2是Apache下的一個重量級WebService框架,准確說它是一個Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和發布WebService,而且可以生成Java和其他語言版WebService客戶端和服務端代碼。這是它的優勢所在。但是,這也不可避免的導致了Axis2的復雜性,使用過的開發者都知道,它所依賴的包數量和大小都是很驚人的,打包部署發布都比較麻煩,不能很好的與現有應用整合為一體。但是如果你要開發Java之外別的語言客戶端,Axis2提供的豐富工具將是你不二的選擇。

3、XFire是一個高性能的WebService框架,在Java6之前,它的知名度甚至超過了Apache的Axis2,XFire的優點是開發方便,與現有的Web整合很好,可以融為一體,並且開發也很方便。但是對Java之外的語言,沒有提供相關的代碼工具。XFire后來被Apache收購了,原因是它太優秀了,收購后,隨着Java6 JWS的興起,開源的WebService引擎已經不再被看好,漸漸的都敗落了。

4、CXF是Apache旗下一個重磅的SOA簡易框架,它實現了ESB(企業服務總線)。CXF來自於XFire項目,經過改造后形成的,就像目前的Struts2來自WebWork一樣。可以看出XFire的命運會和WebWork的命運一樣,最終會淡出人們的視線。CXF不但是一個優秀的Web Services / SOAP / WSDL 引擎,也是一個不錯的ESB總線,為SOA的實施提供了一種選擇方案,當然他不是最好的,它僅僅實現了SOA架構的一部分。
注:對於Axis2與CXF之間的關系,一個是Axis2出現的時間較早,而CXF的追趕速度快。


如何抉擇: 
1、如果應用程序需要多語言的支持,Axis2 應當是首選了; 
2、如果應用程序是遵循 Spring 哲學路線的話,Apache CXF 是一種更好的選擇,特別對嵌入式的 Web Services 來說; 
3、如果應用程序沒有新的特性需要的話,就仍是用原來項目所用的框架,比如 Axis1,XFire,Celtrix或 BEA 等等廠家自己的 Web Services 實現,就別勞民傷財了。


最后,我的建議是:如果你需要多語言的支持,你應該選擇AXIS2。如果你需要把你的實現側重JAVA並希望和Spring集成,CXF就是更好的選擇,特別是把你的Web Service嵌入其他的程序中。如果你覺得這兩個框架的新特性對於你並沒有太大的用處,你會覺得Axis1也是不錯的選擇,你應該繼續使用它直到你有充分的理由去更換它。

 

 

Web Services

 

Web Services 可以將應用程序轉換為網絡應用程序。

  通過使用 Web Services,您的應用程序可以向全世界發布信息,或提供某項功能。

Web Services 可以被其他應用程序使用。

  通過 Web Services,您的會計部門的 Win 2k 服務器可以與 IT 供應商的 UNIX 服務器相連接。

基本的 Web Services 平台是 XML+HTTP。

  Web services 使用 XML 來編解碼數據,並使用 SOAP 來傳輸數據。

學習如何經由 ASP.NET 應用程序創建 Web Services。

  在本教程中,我們把一個 ASP.NET 程序轉換為了 Web Services。

 

您應當具備的基礎知識

在繼續學習之前,您需要對下面的知識有基本的了解:

  • HTML
  • XML

如果您希望首先學習這些項目,請在我們的首頁訪問這些教程。

什么是Web Services?

  • Web Services 是應用程序組件
  • Web Services 使用開放協議進行通信
  • Web Services 是獨立的(self-contained)並可自我描述
  • Web Services 可通過使用UDDI來發現
  • Web Services 可被其他應用程序使用
  • XML 是 Web Services 的基礎

它如何工作?

基礎的 Web Services 平台是 XML + HTTP。

HTTP 協議是最常用的因特網協議。

XML 提供了一種可用於不同的平台和編程語言之間的語言。

Web services 平台的元素:

  • SOAP (簡易對象訪問協議)
  • UDDI (通用描述、發現及整合)
  • WSDL (Web services 描述語言)

我們會在本教程后面章節講解這些主題。

Web services 的未來

請不要過早地期待太多!

Web services 平台是簡單的可共同操作的消息收發框架。它仍然缺少許多諸如安全和路由等重要的特性。但是,一旦 SOAP 變得更加高級,這些事項就會得到解決。

Web services 有望使應用程序更加容易通信。

 

幾年前,Web services 的速度還沒有快到讓人們產生興趣的程度。

感謝主要的 IT 開發商近年來的努力,大多數的人們和企業擁有了寬帶連接,並越來越多地使用 Web。

最重要的事情是協同工作

由於所有主要的平台均可通過 Web 瀏覽器來訪問 Web,不同的平台可以借此進行交互。為了讓這些平台協同工作,Web 應用程序被開發了出來。

Web 應用程序是運行在 Web 上的簡易應用程序。它們圍繞 Web 瀏覽器標准被進行構建,幾乎可被任何平台之上的任何瀏覽器來使用。

Web services 把 Web 應用程序提升到了另外一個層面

通過使用 Web services,您的應用程序可向全世界發布功能或消息。

Web services 使用 XML 來編解碼數據,並使用 SOAP 借由開放的協議來傳輸數據。

通過 Web services,您的會計部門的 Win 2k 服務器可與 IT 供應商的 UNIX 服務器進行連接。

Web services 有兩種類型的應用

可重復使用的應用程序組件

有一些功能是不同的應用程序常常會用到的。那么為什么要周而復始地開發它們呢?

Web services 可以把應用程序組件作為服務來提供,比如匯率轉換、天氣預報或者甚至是語言翻譯等等。

比較理想的情況是,每種應用程序組件只有一個最優秀的版本,這樣任何人都可以在其應用程序中使用它。

連接現有的軟件

通過為不同的應用程序提供一種鏈接其數據的途徑,Web services有助於解決協同工作的問題。

通過使用 Web services,您可以在不同的應用程序與平台之間來交換數據。

 

Web Services 擁有三種基本的元素。

它們是:SOAP、WSDL 以及 UDDI。

什么是 SOAP?

基本的 Web services 平台是 XML + HTTP。

  • SOAP 指簡易對象訪問協議
  • SOAP 是一種通信協議
  • SOAP 用於應用程序之間的通信
  • SOAP 是一種用於發送消息的格式
  • SOAP 被設計用來通過因特網進行通信
  • SOAP 獨立於平台
  • SOAP 獨立於語言
  • SOAP 基於 XML
  • SOAP 很簡單並可擴展
  • SOAP 允許您繞過防火牆
  • SOAP 將作為 W3C 標准來發展

如需更多有關 SOAP 的知識,請訪問我們的《SOAP 教程

什么是 WSDL?

WSDL 是基於 XML 的用於描述 Web Services 以及如何訪問 Web Services 的語言。

  • WSDL 指網絡服務描述語言
  • WSDL 使用 XML 編寫
  • WSDL 是一種 XML 文檔
  • WSDL 用於描述網絡服務
  • WSDL 也可用於定位網絡服務
  • WSDL 還不是 W3C 標准

如需更多有關 WSDL 的知識,請訪問我們的《WSDL 教程

什么是UDDI?

UDDI 是一種目錄服務,通過它,企業可注冊並搜索 Web services。

  • UDDI 指通用的描述、發現以及整合(Universal Description, Discovery and Integration)。
  • UDDI 是一種用於存儲有關 web services 的信息的目錄。
  • UDDI 是一種由 WSDL 描述的網絡服務接口目錄。
  • UDDI 經由 SOAP 進行通迅。
  • UDDI 被構建於 Microsoft .NET 平台之中。

任何應用程序都可擁有 Web Service 組件。

Web Services 的創建與編程語言的種類無關。

一個實例:ASP.NET Web Service

在這個例子中,我們會使用 ASP.NET 來創建一個簡單的 Web Service。

<%@ WebService Language="VB" class="TempConvert" %> Imports System Imports System.Web.Services Public Class TempConvert :Inherits WebService <WebMethod()> Public Function FahrenheitToCelsius (ByVal Fahrenheit As Int16) As Int16 Dim celsius As Int16 celsius = ((((Fahrenheit) - 32) / 9) * 5) Return celsius End Function <WebMethod()> Public Function CelsiusToFahrenheit (ByVal Celsius As Int16) As Int16 Dim fahrenheit As Int16 fahrenheit = ((((Celsius) * 9) / 5) + 32) Return fahrenheit End Function End Class 

此文檔是一個 .asmx 文件。這是用於 XML Web Services 的 ASP.NET 文件擴展名。

要運行這個例子,我們需要一個 .NET 服務器

此文檔中第一行表明這是一個 Web Service,由 VB 編寫,其 class 名稱是 "TempConvert"。

<%@ WebService Language="VB" class="TempConvert" %>

接下來的代碼行從 .NET 框架導入了命名空間 "System.Web.Services"。

Imports System Imports System.Web.Services

下面這一行定義 "TempConvert" 類是一個 WebSerivce 類:

Public Class TempConvert :Inherits WebService

接下來的步驟是基礎的 VB 編程。此應用程序有兩個函數。一個把華氏度轉換為攝氏度,而另一個把攝氏度轉換為華氏度。

與普通的應用程序唯一的不同是,此函數被定義為 "WebMethod"。

請在您希望其成為 web services 的應用程序中使用 "WebMethod" 來標記函數。

<WebMethod()> Public Function FahrenheitToCelsius (ByVal Fahrenheit As Int16) As Int16 Dim celsius As Int16 celsius = ((((Fahrenheit) - 32) / 9) * 5) Return celsius End Function <WebMethod()> Public Function CelsiusToFahrenheit (ByVal Celsius As Int16) As Int16 Dim fahrenheit As Int16 fahrenheit = ((((Celsius) * 9) / 5) + 32) Return fahrenheit End Function

最后要做的事情是終止函數和類:

End Function End Class

假如您把此文件另存為 .asmx 文件,並發布於支持 .NET 的服務器上,那么您就擁有了第一個可工作的 Web Service。

ASP.NET 的自動化處理

通過 ASP.NET,你不必親自編寫 WSDL 和 SOAP 文檔。

如果您仔細研究我們的這個例子,您會發現 ASP.NET 會自動創建 WSDL 和 SOAP 請求。

 

這些函數會向您發送一個 XML 回答

本測試使用 HTTP POST,會發送類似這樣的 XML 響應:

<?xml version="1.0" encoding="utf-8" ?> <short xmlns="http://tempuri.org/">38</short>

使用表單來訪問 Web Service

通過使用表單和 HTTP POST,您可以把 web service 置於您的站點上,比如這樣:

 

 

您可以把 web service 置於您的站點上

您可以使用這些代碼把 web service 放置在您的站點上:

<form target="_blank" action='http://w3school.com.cn/webservices/tempconvert.asmx/FahrenheitToCelsius' method="POST"> <label>華氏度轉換為攝氏度:</label> <p> <span> <input class="frmInput" type="text" size="30" name="Fahrenheit"> </span> <span> <input type="submit" value="提交" class="button"> </span> </p> </form> <form target="_blank" action='http://w3school.com.cn/webservices/tempconvert.asmx/CelsiusToFahrenheit' method="POST"> <label>攝氏度轉換為華氏度:</label> <p> <span> <input class="frmInput" type="text" size="30" name="Celsius"> </span> <span> <input type="submit" value="提交" class="button"> </span> </p> </form>


Web Services 概要

本教程已經向您講解了如何把應用程序轉換為網絡應用程序.

您已經學習了如何使用 XML 在應用程序間發送消息。

您也學習了如何從應用程序導出某項功能(創建一個 web service)。

您已經學習了 Web Services,下一步呢?

下一步您應當學習 WSDL 和 SOAP。

WSDL

WSDL 是基於 XML 的用來描述 Web services 以及如何訪問它們的一種語言。

WSDL 可描述 web service,連同用於 web service 的消息格式和協議的細節。

如果您希望學習更多有關 WSDL 的知識,請訪問我們的《WSDL 教程》。

SOAP

SOAP 是一種使應用程序有能力通過 HTTP 交換信息的基於 XML 的簡易協議。

或者可以更簡單地說:SOAP 是一種用於訪問 web service 的協議。

如果您希望學習更多有關 SOAP 的知識,請訪問我們的《SOAP 教程》。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM