使用WebService實現遠程調用

   上篇博客講解了使用Socket實現遠程調用,今天這篇講解WebService實現遠程調用。首先在開發之前,我們應該有自己的思路,心裏面想好開發的大體步驟,然後我們可以開始開發了。下面是我在寫的時候的一個思路,一起展示給大家。

首先需要有客戶端和服務端

服務端:
第一步:創建一個java工程,不需要導入jar包。
第二步:創建一接口。在Webservice中叫做SEI(wsdl中叫做PortType)
第三步:創建一實現類。需要在實現類上加一個、@Webservice註解
第四步:發佈服務。EndPoint.publish發佈服務。

創建一個接口(天氣查詢服務SEI)

public interface WeatherInterface {

	String getWeatherByCityName(String cityName);
}

SEI實現類

@WebService
public class WeatherInterfaceImpl implements WeatherInterface {

	@Override
	public String getWeatherByCityName(String cityName) {
		System.out.println("接收到客戶端發送的城市名稱:" + cityName);
		//查詢天氣
		String resultString = "暖和點兒了";
		System.out.println("返回天氣信息:" + resultString);
		
		return resultString;
	}

}

創建天氣查詢服務發佈類


  這裏我們建議端口號爲1024以後的,因爲1024以下好多都是系統的端口號,容易起衝突。

public class WeatherServer {

	public static void main(String[] args) {
		//第一個參數:服務發佈的url
		//第二個參數:SEI實現類對象
		Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
	}
}

查看服務是否啓動,出現如下圖則說明發布成功。


使用wsdl


查看wsdl:訪問服務發佈地址+?wsdl

我們只需要 注意service 和targetNamespace



可以使用wsimport工具生成客戶端調用代碼。


 在學之前,先簡單介紹一下,wsimport是jdk自帶的webservice客戶端工具,可以根據wsdl文檔生成客戶端調用代碼(java代碼)無論服務器端的WebService是用什麼語言寫的,都可以生成調用webservice的客戶端代碼,服務端通過客戶端代碼調用webservice。
使用方法:
常用參數爲:
-d<目錄>  - 將生成.class文件。默認參數。
-s<目錄> - 將生成.java文件(一般都使用這個)。
-p<生成的新包名> -將生成的類,放於指定的包下。如果不指定包名就是wsdl命名空間的倒序。
(wsdlurl) - http://server:port/service?wsdl,必須的參數。
示例:
C:/> wsimport -s . http://127.0.0.1:1234/weather?wsdl 
注意:-s不能分開,-s後面有個小點

新建一個工程,找到工程的src目錄:



刷新之後我們看到客戶端生成了如下代碼:


一般我們用WeatherInterfaceImpl,和WeatherInterfaceImplService叫做服務視圖,就夠了。


客戶端的開發步驟。

實現步驟:

第一步:創建一個java工程

第二步:創建一服務視圖對象

第三步:從服務視圖中獲得PortType對象

第四步:調用PortType的方法(可以實現遠程通信)

第五步:接收方法的返回值(服務端響應的結果)

第六步:打印結果。

public class WeatherClient {

	public static void main(String[] args) {
		//創建服務視圖
		WeatherInterfaceImplService service = new WeatherInterfaceImplService();
		//從服務視圖中獲得PortType對象
		WeatherInterfaceImpl portType = service.getWeatherInterfaceImplPort();
		//調用服務端方法
		String weatherInfo = portType.getWeatherByCityName("北京");
		System.out.println(weatherInfo);
		
	}
}


最終我們看到的結果:


服務端控制檯:


客戶端控制檯:



小結:

 既然之前寫了socket實現遠程通信調用,小結裏面就寫一寫兩者的區別吧。

Webservice和sockt的對比

Socket:使用流通信,需要自定義協議。編程複雜。
優點:通信效率高,速度快,適合於傳輸大數據。
缺點:編程複雜。
Webservice:封裝所有通信的細節,只需要像調用本地方法一樣使用即可。很方便。
優點:編程簡單。面向對象開發。
缺點:傳輸效率低。不適合傳輸大數據的情況。


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