WebService 淺析(手機號碼歸屬地例項)
什麼是Webservice
W3C組織對其的定義如下,它是一個軟體系統,為了支援跨網路的機器間相互操作互動而設計。Web Service服務通常被定義為一組模組化的API,它們可以通過網路進行呼叫,來執行遠端系統的請求服務。
簡單的說:WebService即Web服務,它是一種跨程式語言和跨作業系統平臺的遠端呼叫技術。
Web服務:基於HTTP和XML的技術,HTTP是網際網路上應用最為廣泛的一種網路協議,而XML是跨平臺的基礎。
跨程式語言和跨操作平臺:就是說服務端程式採用java編寫,客戶端程式則可以採用其他程式語言編寫,反之亦然!跨作業系統平臺則是指服務端程式和客戶端程式可以在不同的作業系統上執行。
遠端呼叫:就是一臺計算機a上的一個程式可以呼叫到另外一臺計算機b上的一個物件的方法,譬如,銀聯提供給商場的pos刷卡系統,商場的POS機轉賬呼叫的轉賬方法的程式碼其實是跑在銀行伺服器上。再比如,amazon,天氣預報系統,淘寶網,校內網,百度等把自己的系統服務以webservice服務的形式暴露出來,讓第三方網站和程式可以呼叫這些服務功能,這樣擴充套件了自己系統的市場佔有率
web Service:有兩大類:
一類:傳統的webservice,大web service,相對複雜。
一類:輕量級的webservice123
WebService三要素
WebService的三要素是:
SOAP (Simple Object Access Protocol):簡易物件訪問協議,soap用來描述傳遞資訊的格式。
WSDL (WebServices Description Language):Web服務描述語言,用來描述如何訪問具體的介面。
UDDI (Universal Description Discovery and Integration):通用描述、發現及整合,用來管理、分發、查詢webService。
原生態WebService客戶端編寫
常見的手機歸屬地查詢?
http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
1.開啟cmd,執行wsimport生成程式碼。
你不懂命令為什麼能生成程式碼不要緊,記住就好!這是JDK/BIN目錄下自帶的
2.如圖所示,預設情況下程式碼生成在C:\Users\Administrator會生成class和java檔案。刪除class檔案
3.開始編寫查詢手機號歸屬地客戶端
eclipse建立工程,將生成的程式碼copy到你自己想要的包下。記得修改package導包
然後編寫第一個WebService客戶端介面
package cn.com.webxml;
/**
* 第一個WebService客戶端演示
* 根據手機號查詢手機歸屬地
* http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
* @author dongyang
*
* WebService的三要素是:(面試)
* SOAP (Simple Object Access Protocol):簡易物件訪問協議,soap用來描述傳遞資訊的格式。
* WSDL (WebServices Description Language):Web服務描述語言,用來描述如何訪問具體的介面。
* UDDI (Universal Description Discovery and Integration):通用描述、發現及整合,用來管理、分發、查詢webService。
*
*/
public class PhoneAddressClient {
public static void main(String[] args) {
System.out.println(getPhoneAddress("150******78"));//換成自己的號碼即可
}
public static String getPhoneAddress(String phone){
//1.例項化生成的服務類
MobileCodeWS ws = new MobileCodeWS();
//2.呼叫服務類的方法獲取介面例項
MobileCodeWSSoap soap = ws.getMobileCodeWSSoap();
//3.通過介面直接獲取資料
return soap.getMobileCodeInfo(phone,"");
}
}
程式碼結構及測試結果
這就是原生態的WebServiceke客戶端介面。
簡單熟悉這個例子之後。下面開始自定義服務端,釋出服務,編寫客戶端
自定義WebService服務端併發布服務編寫客戶端測試
1.編寫服務介面
package cn.com.webservice;
/**
* WebService服務端
* @author dongyang
*
*/
public interface FisrtWebService {
String getAddressByPhoneNo(String phoneNo);
}
2.編寫介面實現類
package cn.com.webservice;
import javax.jws.WebService;
@WebService//加上這個註解,表示此實現類就是WebService服務
public class FisrtWebServiceImpl implements FisrtWebService {
public String getAddressByPhoneNo(String phoneNo) {
return phoneNo + ": 歸屬地是上海";
}
}
3.釋出服務
package cn.com.webservice;
import javax.xml.ws.Endpoint;
/**
* 釋出服務
* @author dongyang
*
*/
public class PublishServerTest {
public static void main(String[] args) {
//引數1:服務被訪問的url ip+埠號+服務名
//引數2:實現類
Endpoint.publish("http://localhost:9999/getAddress", new FisrtWebServiceImpl());
System.out.println("服務釋出成功");
//檢視WebService服務是否啟動 url+?wsdl
//http://localhost:9999/getAddress?wsdl是否能顯示
}
}
控制檯執行結果:
服務釋出成功
4.驗證服務是否釋出成功
訪問釋出服務的ip+埠+服務名+?wsdl
http://localhost:9999/getAddress?wsdl是否能顯示