聊聊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:點擊這裏

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