WebService怎麼理解和JDK1.4下使用WebService

        由於項目需要,必須使用WebService進行接口數據交換。於是百度了很多有關的信息,挑選了一些解釋的非常好的解釋:

        WebService是一種跨編程語言和跨操作系統平臺的遠程調用技術。所謂遠程調用,就是一臺計算機a上的一個程序可以調用到另外一臺計算機b上的一個對象的方法。

        WSDL:

        好比我們去商店買東西,首先要知道商店裏有什麼東西可買,然後再來購買,商家的做法就是張貼廣告海報。 WebService也一樣,WebService客戶端要調用一個WebService服務,首先要有知道這個服務的地址在哪,以及這個服務裏有什麼方法可以調用,所以,WebService務器端首先要通過一個WSDL文件來說明自己家裏有啥服務可以對外調用,服務是什麼(服務中有哪些方法,方法接受的參數是什麼,返回值是什麼),服務的網絡地址用哪個url地址表示,服務通過什麼方式來調用。

        WSDL(Web Services Description Language)就是這樣一個基於XML的語言,用於描述WebService及其函數、參數和返回值。它是WebService客戶端和服務器端都能理解的標準格式。因爲是基於XML的,所以WSDL既是機器可閱讀的,又是人可閱讀的,這將是一個很大的好處。一些最新的開發工具既能根據你的Web service生成WSDL文檔,又能導入WSDL文檔,生成調用相應WebService的代理類代碼。

       WSDL文件保存在Web服務器上,通過一個url地址就可以訪問到它。客戶端要調用一個WebService服務之前,要知道該服務的WSDL文件的地址。WebService服務提供商可以通過兩種方式來暴露它的WSDL文件地址:1.註冊到UDDI服務器,以便被人查找;2.直接告訴給客戶端調用者。

摘自:http://blog.csdn.net/wooshn/article/details/8069087/   (理解WebService,推薦)

 

        開始沒有接觸過WebService,只知道它是用來交換數據的,於是就我就想,既然是數據交換,

        爲什麼不使用json?

        爲什麼不使用servlet?

        爲什麼不使用其他的技術? 

        後來在網上又找到了一篇很好的帖子 http://www.iteye.com/topic/1135747(創建一個簡單的WebService實例)

        動手做了一個簡單的WebService,後來發現WebService確實是個強大的東西。我所理解的如下:

        A和B在不同的地方開發,而B需要調用A的方法向A發送數據,於是A先定義了一個規範文件,格式爲wsdl,通過這個wsdl告訴B:如果你需要調用我的方法就需要先獲得我的代理,然後調用指定的方法,這個方法的返回值和參數在wsdl中都告訴你了。B知道這個wsdl之後,根據這個wsdl去查看怎麼獲取代理端口,怎麼調用方法,需要傳什麼參數,有什麼返回值。就這樣B就能成功得調用A的方法,並且成功通訊了。

        其實我感覺和post類似,只不過更加規範,對於A來說編程更加簡單了。


        以上是對WebService的理解,但是這些都不是重點!!!

        由於項目的特殊需求,開發環境只能使用JDK1.4,不能使用註解,而剛剛的方法必須要使用到註解,於是又去網上找各種方法,解決方法就是使用各種框架,感覺好複雜,而不用框架都不可以成功。。。。項目的關鍵步驟是獲取代理端口,突然發現了一個神器:WSDL2JAVA,幾年前用java開發以及調用webservice服務都是比較複雜的事情,但現在已經變得很簡單。Axis已經爲我們做好了一切,我們只需要使用它的工具方法生成我們自己想要的webservice服務即可。這裏只先講一下通過WSDL描述,來生成java類的方法。

        使用方法:

        1、下載WSDL2JAVA.rar包,其中包含activation.jar,axis-ant.jar,axis.jar,commons-discovery-0.2.jar,commons-logging-1.0.4.jar,jaxrpc.jar,log4j-1.2.8.jar,mail.jar,saaj.jar,wsdl4j-1.5.1.jar。

        2、解壓之後,編輯(包名,輸出路徑,wsdl)參數並運行WSDL2Java(URL).bat或者WSDL2Java(file).bat後,將在source中生成WebService客戶端代碼。

        3、直接使用生成的代碼調用WebService服務即可。

        (工具下載地址:http://download.csdn.net/detail/a445849497/9579773)

 

        將生成的java文件導入到項目裏面然後直接調用

        // 建立本機到服務器的連接
        XXXX_Service gtService = new XXXX_ServiceLocator();
        // 獲得端口和代理
        XXX_PortType client = gtService.getXXXXServicePort();
        // 調用指定的方法
        result = client.XXXX(data);

        以上幾個步驟就能成功讓B調用A的方法了。


        接下來讓我們來做一個實例:

        測試wsdl爲一個查詢天氣的接口:

        http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

        目的:調用這個接口的函數,獲取天氣信息。

        步驟:我們可以查看到這個接口對應的函數getWeatherbyCityName

        這個wsdl裏面已經對這個方法有了說明,如果不看說明的話,我們可以找到下圖,就可以知道它需要一個String類型的參數theCityName


        下面我們開始使用wsdl2java工具

        1.修改URL.bat裏面的內容。

 

        2.生成java文件


        3.在MyEclipse裏面建一個工程,並將這個文件拷進去。


        4.有很多錯誤,那是因爲我們沒有導包,我們把lib下的包全部導入工程


        5.是不是很興奮,一個錯誤都沒有了,然後我們再新建一個測試類


        6.編寫測試類,併成功調用。




        總結:

        爲什麼要學習web service?

        大多數對外接口會實現web service方法而不是http方法,如果你不會,那就沒有辦法對接。

        web service相對http (post/get)有好處嗎?

        1.接口中實現的方法和要求參數一目瞭然

        2.不用擔心大小寫問題

        3.不用擔心中文urlencode問題

        4.代碼中不用多次聲明認證(賬號,密碼)參數

        5.傳遞參數可以爲數組,對象等...

        web service相對http(post/get)快嗎?

        由於要進行xml解析,速度可能會有所降低。

        web service 可以被http(post/get)替代嗎?

        完全可以,而且現在的開放平臺都是用的HTTP(post/get)實現的。

        摘自:http://my.oschina.net/u/1757458/blog/365588   (WebService和Http的對比)

 

        推薦 http://blog.csdn.net/zhuizhuziwo/article/details/8153327

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章