聊聊webservice


  webservice這個東西已經是一個比較舊的技術了,可能很多人都沒聽說過,乍一聽是不是跟websocket有關呀,哈哈哈,其實壓根就是兩個東西;

  我對webservice的理解是:遠程服務器有一個微服務,暴露了一個接口和一個方法,你可以直接調用這個遠程方法,如同本地的方法一樣;

  提前須知:常用開發webservice的方式一般兩種,一種是jdk自帶的方式,一種是使用apache的CXF框架,我們這里使用原生的jdk自帶的方式

1.為什么要有webservice

  現在編程語言這么多,有沒有辦法屏蔽掉編程語言的差異性,使得不同開發語言開發的系統能夠協同工作。例如可不可以用js開發的系統能夠和java開發的系統進行通信?當然可以呀╮(╯_╰)╭,有經驗的人已經知道了,你妹,這不就是前后端分離么?前端可以使用vue開發,后端使用java開發,基於http請求以json的格式進行數據的交換,就可以使得兩種不同需要開發的應用達到通信的目的;

  webservice就是差不多的這么一個技術,分為客戶端和服務端,服務端隨意用什么語言開發,只要最后發布成webservice服務就行!客戶端我們這里使用java,通過http+xml去調用webservice服務

  道理是不是很容易,其實這里我們需要關注的就是幾個點:

    (1).怎么知道遠程的服務暴露的地址和方法呢?

    答:發布webservice的服務端會提供一個url(例如天氣預報的webservice的url文檔:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL),這個url我們打開就是一個文檔,可以使用jdk中自帶的工具生成一大堆java文件,我們直接使用

    (2)客戶端怎么是通過什么協議調用呢?

    答:首先根據提供的url生成的java文件,然后一般底層通過http+xml的方式調用,這種也叫做soap調用;

 

2. webservice服務端發布服務

  其實一般情況我們是不會開發webservice服務端的,你想想你有啥數據需要給別的公司或者組織使用的?不過這里我們還是使用java語言(其他語言也行)來自己也發布一下webservice服務;

  接口:

 

 

  到這里我們的webservice服務端已經弄好了,然后我們瀏覽器中訪問http://localhost:8888/Webservice?wsdl,就能看到下面這種文檔(注意,文檔從下往上看);

  隨便看看這個文檔應該能看到我們發布的服務的基本接口信息了,如果想詳細的了解這種wsdl文檔結構的,可以自行去百度了解

 

3. webservice客戶端調用

  實際的場景如果我們要去調用遠程的webservice服務,別人會把這個wsdl文檔的url發給我們的;

  在jdk中安裝目錄下的bin目錄下有個小工具wsimport,使用命令:wsimport -s ./ http://localhost:8888/Webservice?wsdl,這樣就可以根據文檔直接生成我們需要的java和class文件,然后丟到我們的項目下面

如果想指定包名,可以使用這個命令:wsimport -s ./ -p com.skd.client http://localhost:8888/Webservice?wsdl

  這里的-s參數表示生成java文件和class文件

 

 

  開始調用,其實就跟使用本地的類一樣,很容易的吧!

 

 

4.service服務端優化

  前面發布webservice服務是通過在main方法中,但是在項目中這這種方式肯定不行!

  1.javaweb應用發布webservice服務,我們將發布接口的方法放入到一個servlet中的init方法,然后在web.xml中配置一個servlet(這里需要設置一下<load-on-startup></load-on-startup>),只在應用啟動的時候就會執行init方法

  2. javaweb應用發布webservice服務,使用監聽器的方式,例如像下面這樣(這個代碼隨便找的)

 

   3.spring應用發布webservice服務,將提供服務的類放到spring容器中,也就是加個注解@Service,然后在這個bean的構造器中發布服務,這樣在spring容器啟動的時候會實例化這個bean,調用構造器達到發布webservice服務的目的

  4. springboot發布webservice服務方式就更多了,自行可以去了解,總之怎么方便怎么來,看每個人的愛好吧!

 

5. webservice的優缺點

  說了這么多,我們知道了其大概的用法,優點很明顯,實現了應用的解耦,不需要關注編程語言的差異;

  缺點也比較明顯,由於是http+xml的格式進行數據傳輸和解析,效率不可避免的慢,所以一般新的項目也不會使用webservice這種方式;

     有興趣的可以看看開源的常用的webservice服務url:點擊這里


免責聲明!

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



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