<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0

    一. 介紹


    本文并不是想介紹 Web 服務(wù)的原理、系統(tǒng)架構(gòu)等,我們假設(shè)您已經(jīng)了解了關(guān)于 Web 服務(wù)的一些基本的概念、原理等知識。本文主要是針對那些已經(jīng)了解 Web 服務(wù)概念,但是還沒有親身體會 Web 服務(wù)所帶來令人歡欣鼓舞的特征的開發(fā)人員。在此我們認(rèn)為你已經(jīng)具備了 Java XML 等基礎(chǔ)知識,如果你還有其他開發(fā)環(huán)境的經(jīng)驗(yàn)例如 VB VC 那是再好不過的了。

    1 Web 服務(wù)


    雖然我們并不想詳細(xì)講述 Web 服務(wù)的體系結(jié)構(gòu),但是大概的介紹一下還是有必要的。 Web 服務(wù)是一種新型的 Web 應(yīng)用程序。不同于其他 Web 應(yīng)用程序,它是自適應(yīng)、自我描述、模塊化的應(yīng)用程序,并可以跨越 Web 進(jìn)行發(fā)布、定位以及調(diào)用。簡單的 Web 服務(wù)可以提供例如天氣預(yù)報(bào)或者航班信息的服務(wù)。一旦部署了 Web 服務(wù),其他的應(yīng)用程序就可以發(fā)現(xiàn)和調(diào)用所部署的服務(wù)。

    2 AXIS 項(xiàng)目


    Axis
    框架來自 Apache 開放源代碼組織,它是基于 Java 語言的最新的 SOAP 規(guī)范( SOAP 1.2 )和 SOAP with Attachments 規(guī)范(來自 Apache Group )的開放源代碼實(shí)現(xiàn)。有很多流行的開發(fā)工具都使用 AXIS 作為其實(shí)現(xiàn)支持 Web 服務(wù)的功能,例如 JBuilder 以及著名的 Eclipse J2EE 插件 Lomboz AXIS 的最新版本是 1.1 ,可以從 http://ws.apache.org/axis/index.html 下載。

     

    整個(gè) AXIS 項(xiàng)目包括以下幾個(gè)部分:

    1. 消息流子系統(tǒng)
      消息流子系統(tǒng)提供了靈活的消息傳遞框架,這個(gè)消息傳遞框架包括處理程序、鏈、序列化程序和反序列化程序。處理程序是一個(gè)處理請求、響應(yīng)和故障流的對象。處理程序可被組合在一起成為鏈,而且可以使用一個(gè)靈活的部署描述符來配置這些處理程序的順序。
    2. 傳輸框架子系統(tǒng)
      提供了一個(gè)傳輸框架,這個(gè)傳輸框架可以幫助您創(chuàng)建自己的可插式傳輸發(fā)送器和傳輸偵聽器。
    3. 數(shù)據(jù)編碼子系統(tǒng)
      AXIS
      完全按照 XML Schema 規(guī)范提供各種數(shù)據(jù)類型的自動序列化,并且提供功能擴(kuò)展接口來使用您自己定制的序列化器和反序列化器。
    4. 其他
      AXIS
      完全支持 WSDL 以及日志記錄、出錯(cuò)以及故障處理機(jī)制。它同時(shí)提供一些工具用來講 WSDL 文檔轉(zhuǎn)換成客戶端的調(diào)用框架以及根據(jù)類來產(chǎn)生 WSDL 定義文檔。

    AXIS 目前版本支持的標(biāo)準(zhǔn)是: W3C SOAP 1.1 1.2 WSDL 1.1 SAAJ 1.1 SUN 公司: SOAP with Attachments API for Java ); JAX-RPC SUN 公司: Java API for XML-Based RPC 1.0

    除了前面介紹的 AXIS 外,本文中還將會用到 TOMCAT ,這里不再另行介紹。另外為了演示 Web 服務(wù)真正與開發(fā)環(huán)境無關(guān)以及 AXIS 產(chǎn)生的是標(biāo)準(zhǔn)的、符合規(guī)范的 Web 服務(wù),我們還將用到微軟公司的 SOAP TOOLKIT 以及微軟的開發(fā)環(huán)境 VB VC 來做為 Web 服務(wù)的客戶端。

    . 環(huán)境搭建


    由于 AXIS 本身是基于 Java 語言開發(fā)的項(xiàng)目,并且是以 Web 應(yīng)用形式發(fā)布的,因此它運(yùn)行時(shí)需要一個(gè)應(yīng)用服務(wù)器作為支撐。為了方便我們這里選用的是 Tomcat 。由于 AXIS 本身需要用到處理 XML 信息的包,所以我們建議使用 JDK1.4 并安裝 Tomcat 4.1.24 。下面是環(huán)境搭建步驟,讀取根據(jù)自身情況進(jìn)行安裝。

    1. 安裝 JDK1.4.1
    2. 安裝 Tomcat 4.1.24 C:\Tomcat 并驗(yàn)證安裝是否成功
    3. 下載 AXIS 項(xiàng)目打包文件 axis-1_1.zip 解壓縮后將目錄中的 webapps 目錄下的 axis 子目錄拷貝到 C:\Tomcat\webapps 下。
    驗(yàn)證 AXIS 的安裝:重新啟動 Tomcat 服務(wù)器后打開瀏覽器輸入網(wǎng)址 http://localhost:8080/axis 后,點(diǎn)擊鏈接 "Validate" 來驗(yàn)證 Axis 所需的幾個(gè) Java 包是否齊全。  

     

    點(diǎn)擊超鏈接Validate后,AXIS會自動檢查所需的每一個(gè)Java組件,這協(xié)組件分為:必需組件以及可選組件,必須保證所有必需組件都存在。 

    三. Web Service服務(wù)端開發(fā)


    經(jīng)過了前兩步之后我們就可以開始Web服務(wù)之旅了!大多數(shù)人在學(xué)習(xí)一種編程語言的第一步都是從Hello world程序開始的,我們也不例外。我們將提供這樣一個(gè)Web服務(wù),通過給它傳入姓名,服務(wù)返回:你好[姓名],歡迎來到Web服務(wù)的世界。這就是我們的需求。我們將馬上根據(jù)AXIS的要求完成我們的需求,你就會發(fā)現(xiàn)原來Web服務(wù)可以這么簡單!

    編寫JavaHello.java,內(nèi)容如下:

     
     
    public class Hello{
     public String hello(String name){
      if(name==null)
       name = "";
      return "你好"+name+",歡迎來到Web服務(wù)的世界!";
    }
    }

     

    僅此而已,無需編譯,將該文件改名為Hello.jws并拷貝到AXIS應(yīng)用目錄C:\Tomcat\webapps\axis下。

    下面我們就可以測試該Web服務(wù)了,打開瀏覽器并輸入剛剛創(chuàng)建的文件名對應(yīng)的URL地址http://localhost:8080/axis/Hello.jws瀏覽器顯示如下結(jié)果:

    There is a Web Service here     
            Click to see the WSDL 

     

    點(diǎn)擊頁面上的鏈接查看該Web服務(wù)對應(yīng)的WSDL信息如下所示(我們將在下一小節(jié)簡單介紹WSDL

     
     
    <?xml version="1.0" encoding="UTF-8" ?>
    -<wsdl:definitions
     targetNamespace="http://localhost:8080/axis/Hello.jws"
     xmlns="http://schemas.xmlsoap.org/wsdl/"
     xmlns="http://www.w3.org/2000/xmlns/"
     xmlns:apachesoap="http://xml.apache.org/xml-soap" 
     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
     xmlns:impl="http://localhost:8080/axis/Hello.jws" 
     xmlns:intf="http://localhost:8080/axis/Hello.jws"
     xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
     - <wsdl:message name="helloRequest">
     <wsdl:part name="name" type="xsd:string" /> 
     </wsdl:message>
     + <wsdl:message name="helloResponse">
     - <wsdl:portType name="Hello">
     - <wsdl:operation name="hello" parameterOrder="name">
     <wsdl:input name="helloRequest" message="intf:helloRequest" /> 
     <wsdl:output name="helloResponse" message="intf:helloResponse" />
     </wsdl:operation> 
     </wsdl:portType>
     - <wsdl:binding name="HelloSoapBinding" type="intf:Hello"> 
     <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
     - <wsdl:operation name="hello"> 
     <wsdlsoap:operation soapAction="" />
     - <wsdl:input name="helloRequest">
     <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
      namespace="http://DefaultNamespace" />  
     </wsdl:input>- <wsdl:output name="helloResponse">  
     <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
      namespace="http://localhost:8080/axis/Hello.jws" />   
     </wsdl:output> 
     </wsdl:operation> 
     </wsdl:binding>
     - <wsdl:service name="HelloService">
     - <wsdl:port name="Hello" binding="intf:HelloSoapBinding">
     <wsdlsoap:address location="http://localhost:8080/axis/Hello.jws" /> 
     </wsdl:port>  
     </wsdl:service> 
     </wsdl:definitions>

     

    到此我們已經(jīng)完成了helloWeb服務(wù)了,那我們怎么告訴用戶如何來使用該服務(wù)呢?我們只需要告訴用戶我們的Web服務(wù)的URL地址:http://localhost:8080/axis/Hello.jws?wsdl就可以了!下一節(jié)我們將介紹如何通過這個(gè)地址來訪問對應(yīng)的Web服務(wù)。

    四. Web Service客戶端開發(fā)


    在這一節(jié)中我們將使用三種不同的語言來訪問剛剛創(chuàng)建的Web服務(wù),分別是JavaVBVC。為了使用VBVC訪問Web服務(wù),我們需要安裝微軟公司的Soap Toolkit 開發(fā)工具包,這個(gè)工具包可以從微軟公司的主頁

    http://download.microsoft.com/download/xml/soap/2.0/W98NT42KMe/EN-US/SoapToolkit20.exe

    下載,下載該軟件包并使用默認(rèn)方式安裝即可。

    在開始客戶端開發(fā)之前有兩個(gè)概念我們必須先粗略的介紹一下。

    SOAP:簡單對象訪問協(xié)議。這是一種在松散的、分布的環(huán)境中使用XML對等地交換結(jié)構(gòu)化的和類型化的信息提供了一個(gè)簡單且輕量級的機(jī)制,它是一個(gè)基于XML的協(xié)議。它包括四個(gè)部分:SOAP封裝(envelop),封裝定義了一個(gè)描述消息中的內(nèi)容是什么,是誰發(fā)送的,誰應(yīng)當(dāng)接受并處理它以及如何處理它們的框架;SOAP編碼規(guī)則(encoding rules),用于表示應(yīng)用程序需要使用的數(shù)據(jù)類型的實(shí)例; SOAP RPC表示(RPC representation),表示遠(yuǎn)程過程調(diào)用和應(yīng)答的協(xié)定;SOAP綁定(binding),使用底層協(xié)議交換信息。

    雖然這四個(gè)部分都作為SOAP的一部分,作為一個(gè)整體定義的,但他們在功能上是相交的、彼此獨(dú)立的。特別的,信封和編碼規(guī)則是被定義在不同的XML命名空間(namespace)中,這樣使得定義更加簡單。

    SOAP的主要設(shè)計(jì)目標(biāo)是簡明性和可擴(kuò)展性。這就意味著有一些傳統(tǒng)消息系統(tǒng)或分布式對象系統(tǒng)中的特性將不包含在SOAP的核心規(guī)范中。這些特性包括:分布式垃圾收集;批量消息傳輸/處理;對象引用;對象激活。

    WSDLWeb Service描述語言。使用了WSDL,我們就可以通過這種跨平臺和跨語言的方法使Web Service代理的產(chǎn)生自動化。就像COMCORBAIDL文件,WSDL文件由客戶和服務(wù)器約定。由于WSDL設(shè)計(jì)成可以綁定除SOAP以外的其他協(xié)議,這里我們主要關(guān)注WSDLHTTP上和SOAP的關(guān)系。同樣,由于SOAP目前主要用來調(diào)用遠(yuǎn)程的過程和函數(shù),WSDL支持SOAP傳輸?shù)奈臋n規(guī)范。

    WSDL文檔可以分為兩部分。頂部分由抽象定義組成,而底部分則由具體描述組成。抽象部分以獨(dú)立于平臺和語言的方式定義SOAP消息,它們并不包含任何隨機(jī)器或語言而變的元素。這就定義了一系列服務(wù),截然不同的網(wǎng)站都可以實(shí)現(xiàn)。

    1. Java客戶端


    使用AXIS的工具將使Web服務(wù)的訪問和我們之前介紹的創(chuàng)建一個(gè)Web服務(wù)一樣的簡單。我們前面安裝的AXIS環(huán)境中已經(jīng)包含著這樣的工具,它是一個(gè)Java類,類名為:org.apache.axis.wsdl.WSDL2Java。打開命令行窗口,轉(zhuǎn)到AXIS目錄下的WEB-INF子目錄。確保Tomcat服務(wù)已經(jīng)處于啟動狀態(tài),鍵入命令

     
     
    Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/Hello.jws?wsdl

     

    該命令執(zhí)行的結(jié)果是在當(dāng)前所在目錄下產(chǎn)生一個(gè)子目錄 localhost/axis/Hello_jws,該目錄下有四個(gè)Java源文件,它們分別是:

    Hello.java 定義了Web服務(wù)接口,此例中只有一個(gè)hello方法。

    HelloService.java 定義了用于獲取Web服務(wù)接口的方法。

    HelloServiceLocator.java 接口HelloService的具體實(shí)現(xiàn)。

    HelloSoapBindingStub.java Web服務(wù)客戶端樁,通過該類與服務(wù)器交互。

    這四個(gè)Java類幫我們處理了大部分的邏輯,我們需要的僅僅是把這些類加到我們的項(xiàng)目然后創(chuàng)建一個(gè)我們自己的類來調(diào)用它們即可。為此我們新加一個(gè)類Main.java,為了方便,讓這個(gè)類與剛產(chǎn)生的四個(gè)類都在同一個(gè)包下。內(nèi)容如下:

     
     
    //Main.java
    package localhost.axis.Hello_jws;
    public class Main{
    public static void main(String[] args) throws Exception{
     HelloService service = new HelloServiceLocator();
     Hello hello = service.getHello(); 
     System.out.println("Response:"+hello.hello("罐頭")); 
     }
    }

     

    使用以下命令進(jìn)行編譯:

     javac -classpath lib\axis.jar;lib\jaxrpc.jar localhost\axis\Hello_jws\*.java

     

    如果編譯沒有問題的話執(zhí)行該測試程序:

     Java -Djava.ext.dirs=lib -cp . localhost.axis.Hello_jws.Main
    運(yùn)行結(jié)果:Response:你好罐頭,歡迎來到Web服務(wù)的世界!

     

    WSDL2Java工具自動產(chǎn)生的幾個(gè)類中,類HelloServiceLocator中保存這一些跟服務(wù)器相關(guān)的信息,例如URL地址等,當(dāng)服務(wù)器的地址更改后但是服務(wù)并沒有改動的時(shí)候直接修改該文件中的字符串定義,而無需重新生成這幾個(gè)類。具體需要修改的內(nèi)容,打開該文件便可一目了然。
    posted on 2006-09-20 14:43 周銳 閱讀(578) 評論(0)  編輯  收藏 所屬分類: Web Service
    主站蜘蛛池模板: 久久免费观看视频| 免费视频爱爱太爽了| 久久综合AV免费观看| 国产性爱在线观看亚洲黄色一级片 | 男人免费视频一区二区在线观看 | 91嫩草免费国产永久入口| 国产乱子影视频上线免费观看| 国产亚洲人成网站在线观看不卡| 亚洲Av高清一区二区三区| 一级毛片a免费播放王色| 91成人免费在线视频| 亚洲视频在线免费| 久久精品国产亚洲av麻豆蜜芽 | 亚洲av无码专区青青草原| 青青草无码免费一二三区| 免费永久看黄在线观看app| 亚洲精品免费在线视频| aaa毛片视频免费观看| 免费观看的av毛片的网站| 亚洲免费视频在线观看| 一级做性色a爰片久久毛片免费| 欧洲黑大粗无码免费| 国产av无码专区亚洲av桃花庵| 爱爱帝国亚洲一区二区三区| 97精品免费视频| 在线观看国产区亚洲一区成人 | 亚洲一线产区二线产区区| 日本免费污片中国特一级| 免费成人av电影| 亚洲人成未满十八禁网站| 日韩中文字幕免费视频| 国产亚洲午夜高清国产拍精品| 亚洲精品国产第一综合99久久| 永久看日本大片免费35分钟| 亚洲精品自在在线观看| 污污视频网站免费观看| 日韩毛片无码永久免费看| 久久精品亚洲AV久久久无码| 99久热只有精品视频免费观看17| 国产国拍精品亚洲AV片| 黄色免费在线观看网址|