1、---------------------------------介紹--------------------------------------------------
(1)遠程調用:一個系統遠程調用另一個系統的服務,已獲取遠程系統的業務數據。
(2)為什么使用:基於安全性的考慮,一般企業不會開放自己的數據庫,只能使用遠程調用技術。

2----------------------- Webservice是如何實現遠程調用?三要素在webservice的作用?-----------------------------------
(1)Webservice原理:webservice是一種使用http傳輸的SOAP協議的數據的遠程調用技術。
(2) WSDL作用:webservice服務端的使用說明書。(Web Service Description Language)
(3)SOAP作用:規范XML標簽。
(4) UDDI:提供webservice服務端的搜索和注冊功能。
注意事項:
- 開發webservice的應用需要開發客戶端和服務端
- 發客戶端需要參考webservice服務端的使用說明書(WSDL)

3----------------------------Webservice入門程序--------------------------------------------------
(1) 服務端
第一步:創建SEI(Service Endpoint Interface)接口,本質就是Java接口
public interface WeatherInterface {
public String queryWeather(String Name);
}
l 第二步:創建SEI實現類
- 在類上加入注解:@WebService
- 該注解表示該類是一個webservice的服務類,要發布該類下public方法
@WebService
public class WeatherInterfaceImpl implements WeatherInterface {
@Override
public String queryWeather(String Name) {
System.out.println("from client..."+Name);
String weather = "晴";
return weather;
}
}
l 第三步:發布服務
- 用Endpoint類的publish方法發布服務
- 方法publish兩個參數:1.服務地址;2.服務實現類的實現
public class WeatherServer {
public static void main(String[] args) {
//用Endpoint類的publish方法發布服務
//端口號建議不要太短,容易被系統占用;不要太長,太長不支持
Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
}
}
l第四步:測試服務是否發布成功,通過閱讀服務端的使用說明書,確定關鍵元素存在(類/方法/參數等),表示服務發布成功
- WSDL地址規則:服務地址+?wsdl
- WSDL地址的閱讀方式:從下往上找到service標簽,確定binding屬性
注意:
發布SOAP1.2服務端
l第一步:在實現類上加入如下注解
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
l第二步:引入第三方插件的jar包(jaxws-ri-2.2.8)
第三步:重新啟動服務端
(2)客戶端(好幾種方法實現)
開發步驟:
第一步:wsimport命令生成客戶端代碼。
wsimport -s . http://127.0.0.1:12345/weather?wsdl --------------------------如果你的開發工具是IDEA可以直接使用工具,里面有,可以百度一下。
第二步:創建服務視圖,服務視圖名的類從service標簽的name屬性獲取
第三步:通過服務視圖獲取對應服務實現類的實例,服務實現類的名稱從portType的name屬性獲取
第四步:調用查詢方法,方法名從operation下的name屬性獲取
public class WeatherClient {
public static void main(String[] args) {
//創建服務視圖
WeatherInterfaceImplService weatherInterfaceImplService = new WeatherInterfaceImplService();
//獲取服務實現類的實例
String weather = weatherInterfaceImpl.queryWeather("北京");
System.out.println(weather);
}
}
5-------------------------- Webservice優缺點--------------------------
優點:
- 跨越防火牆,使用http協議,http協議的默認端口是80,防火牆默認是不攔截80端口
- 跨平台,使用http和XML,這兩個協議都是跨平台的
- Webservice支持面向對象編程
缺點:
- Webservice使用XML標簽傳輸數據,發送數據時XML標簽也必須發送,標簽又要遵循SOAP協議,隨着SOAP協議的完善,標簽越來越多,傳輸效率下降,性能差
6----------------------------使用------------------------------------
適用場景:
- 發布一個服務,客戶端類型未知,不考慮性能,建議使用webservice
- 服務端已確定使用webservice,客戶端無法更改
不適用場景:
- 考慮性能時不建議使用webservice
