<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
    主站蜘蛛池模板: 亚洲中文字幕一二三四区| 亚洲国产综合精品| 阿v视频免费在线观看| 天天摸夜夜摸成人免费视频| 久久亚洲国产精品成人AV秋霞| 秋霞人成在线观看免费视频| 亚洲成人中文字幕| 日本黄页网址在线看免费不卡| 国产免费爽爽视频免费可以看| 亚洲av日韩综合一区二区三区| 日本19禁啪啪无遮挡免费动图| 人人狠狠综合久久亚洲| 免费99热在线观看| eeuss草民免费| 亚洲桃色AV无码| 免费A级毛片无码A∨| 亚洲欧洲精品视频在线观看| 中文字幕免费在线看线人 | 久久综合AV免费观看| 中文字幕亚洲情99在线| 小小影视日本动漫观看免费| 深夜久久AAAAA级毛片免费看| 国产乱辈通伦影片在线播放亚洲 | 久久亚洲精品无码| 蜜臀98精品国产免费观看| 国产成人精品亚洲2020| 日本免费人成黄页网观看视频| 又大又硬又粗又黄的视频免费看 | 理论亚洲区美一区二区三区| 亚洲精品成人区在线观看| 好吊色永久免费视频大全| 亚洲国产香蕉碰碰人人| 四虎成人免费观看在线网址| 免费手机在线看片| 亚洲精品综合一二三区在线| 成年人免费网站在线观看| 一级毛片不卡免费看老司机| 久久亚洲成a人片| 国产视频精品免费| 中国一级特黄的片子免费| 亚洲一级毛片免费在线观看|