初次涉及
通過上述的Web Service的簡介,其實還是有點難理解Web Service的具體功用。其實說白了,WebService就是通過調用
其他網站的資源來獲取一些必要的信息。舉個例子:網絡上的網站,我們電腦中的QQ等等都會涉及到天氣預報,而這些天氣預
報其實就是通過Web Service來調用國家氣象臺網站的一些信息,而爲什麼要通過WebService也就很好理解了,總不能爲了這
麼個功能而自己建立個氣象預報臺?
圖2.1.1是我粗略畫的關於Web Service的基本傳輸機制。
圖2.1.1 Web Service 的傳輸原理
第一個Demo
創建服務端——Web Service Project
對於Web Service Project的創建,供選擇的框架有:JAX-WS和WS。其實MyEclipse的早期版本還有個是Xfire,只不過我用的是10.6的版本,這也就造成了過時的Xfire被新版本摒棄的情況。我對這三個框架做個簡要的介紹:
框架名 |
描述 |
JAX-WS |
是新的WebService模式,基於註解,對WebService進行配置,相對於Xfire減少了很多的麻煩 |
REST(JAX-RS) |
用的很少,這裏不做介紹 |
Xfire |
配置繁瑣,已經被摒棄 |
圖2.2.1.1 建立Web Service Project第一步
建立業務
因爲是測試的緣故,所以這裏只是簡單的返回一個字符串:
圖2.2.2.1 創建業務類
package net.xuqiang.service;
publicclass HelloService {
public String sayHello(){
return"HELLO";
}
}
代碼段2.2.2.1 業務類實現代碼
發佈WS
圖2.2.3.1 點擊發布WS按鈕
圖2.2.3.2 發佈WS配置
註釋:因爲我們是新建立的,並沒有建立過WSDL,所以選擇Create web servicefrom Java class(Bottom-up scenario)選項,至於框架的選擇則不用多說還是JAX-WS。
圖2.2.3.3 發佈WS配置2
註釋:Java class選擇的是剛剛我們建立的HelloService業務類。因爲之前沒有生成過WSDL的緣故,所以需要把Generate WSDL inProject勾選上。另外一個要注意的是:Service Port的填寫,這個是你用來訪問的一個路徑,也就是客戶端是通過這個路徑來訪問的。
配置
MyEclipse->Properties->JavaBuild Path->Libraries選項
圖2.2.3.1 添加需要的JAR包
註釋:選擇Add Library
圖2.2.3.2 添加Library
註釋:選擇MyEclipse Libraries
圖2.2.3.3 選擇Libraries
註釋:選擇JAX-WS 2.1 Runtime Libraries(Project Metro 1.1)和JAX-WS 2.1 APILibraries這兩個包集。
測試WS
將Web Service項目添加至Tomcat,並且啓動Tomcat。
開啓瀏覽器,在地址欄輸入:
http://localhost:8080/WebServiceTest/HelloServicePort?wsdl
圖2.2.4.1 瀏覽器返回的信息
註釋:如果出現圖2.2.4.1所示的圖片,那麼表示Web Service發佈成功。
創建客戶端
創建一個Java Project
圖2.2.5.1 創建客戶端
註釋:直接Finish結束創建
配置客戶端
圖2.2.6.1 點擊New Web Service Client
圖2.2.6.2 配置1
圖2.2.6.3 配置2
註釋:WSDL URL填寫的爲之前我們測試WS時候在瀏覽器中輸入的地址,其實這個地址就是用來尋找WSDL配置文件的。其他不需要變動,點擊Next。
圖2.2.6.4 測試連接
註釋:這是用來測試所輸入的WSDL的URL路徑是否正確,當然這個前提是你得開啓Web Service的服務端。點擊Finish結束配置。
圖2.6.5 配置完成後的文件結構圖
註釋:配置完成後,MyEclipse會自動生成一系列的java文件。
測試客戶端
圖2.2.7.1 建立測試類
package net.xuqiang.service;
publicclass HelloTest {
publicstaticvoid main(String[] args) {
HelloServiceService service = new HelloServiceService();
HelloServiceDelegate delegate = service.getHelloServicePort();
System.out.println(delegate.sayHello());
}
}
代碼段2.2.5.1 測試調用類代碼片段
圖2.2.7.2 運行結果圖
註釋:運行結果爲我們在業務類中返回的字符串“HELLO”