Web service 介绍与简单应用
一、Web service 介紹
什么是 Web service
到目前為止對(duì) Web service 沒(méi)有統(tǒng)一的定義,這里以一種更容易理解的方式解釋。Web service 是一個(gè)平臺(tái)獨(dú)立的,低耦合的,自包含的、基于可編程的 web 的應(yīng)用程序,即是一種跨編程語(yǔ)言和操作系統(tǒng)平臺(tái)的遠(yuǎn)程調(diào)用技術(shù)。
Web service 技術(shù), 能使得運(yùn)行在不同機(jī)器上的不同應(yīng)用無(wú)須借助附加的、專(zhuān)門(mén)的第三方軟件或硬件, 就可相互通信。Web service 可以使你的網(wǎng)站使用其他網(wǎng)站的資源,比如在網(wǎng)頁(yè)上顯示天氣、地圖的最新動(dòng)態(tài)等等。
本地服務(wù)的缺陷
"網(wǎng)絡(luò)服務(wù)"是軟件開(kāi)發(fā)和使用的趨勢(shì),本地服務(wù)將越來(lái)越少,主要有以下幾個(gè)原因:
1.本地資源不足。很多數(shù)據(jù)和資料,本地得不到,只有向其他網(wǎng)站要。
2.成本因素。本地提供服務(wù),往往是不經(jīng)濟(jì)的,使用專(zhuān)業(yè)網(wǎng)站的服務(wù)更便宜。這里面涉及硬件和人員兩部分,即使你買(mǎi)得起硬件,專(zhuān)門(mén)找一個(gè)人管理系統(tǒng),也是很麻煩的事。
3.可移植性差。如果你想把本機(jī)的服務(wù),移植到其他機(jī)器上,往往很困難,尤其是在跨平臺(tái)的情況下。
Web service 的優(yōu)勢(shì)
1.自包含。意思是客戶端不需要包含任何附加的軟件或硬件,只要客戶端支持 Http 和 XML 就可以完成數(shù)據(jù)的交換或集成。
2.跨平臺(tái)與跨語(yǔ)言。無(wú)論你使用哪種語(yǔ)言,只要遵循 Web service 的規(guī)范就可以互相調(diào)用。
3.通過(guò)網(wǎng)絡(luò)進(jìn)行發(fā)布,查找和使用,并且不需要考慮客戶端兼容問(wèn)題,一次性就能完成。
4.可以實(shí)現(xiàn)多數(shù)據(jù)與多種服務(wù)聚合。
Web service 三個(gè)核心定義
WSDL(Web services Description Language)Web services 描述語(yǔ)言。一個(gè) XML 格式文檔,用以描述服務(wù)端口訪問(wèn)方式和使用協(xié)議的細(xì)節(jié)。通常用來(lái)輔助生成服務(wù)器和客戶端代碼及配置信息。
SOAP(Simple Object Access Protocol)簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議。它是一種標(biāo)準(zhǔn)化的通訊規(guī)范,主要用于 Web 服務(wù) (Web service) 中。這種規(guī)范基于兩個(gè)我們熟知的協(xié)議:HTTP 和 XML。
UDDI(Universal Description, Discovery, and Integration)一個(gè)用來(lái)發(fā)布和搜索 WEB 服務(wù)的協(xié)議,應(yīng)用程序可借由此協(xié)議在設(shè)計(jì)或運(yùn)行時(shí)找到目標(biāo) WEB 服務(wù)。這些標(biāo)準(zhǔn)由這些組織制訂:W3C 負(fù)責(zé) XML、SOAP 及 WSDL;OASIS 負(fù)責(zé) UDDI。
二、使用 Java 原生 API 快速體驗(yàn) Web service
Java 的原生 JDK 對(duì) Web service 作了支持,下面我們通過(guò)服務(wù)端 (可以理解為其他服務(wù)器上的資源) 與客戶端 (本地調(diào)用) 的實(shí)現(xiàn)來(lái)模擬中間的調(diào)用過(guò)程。
服務(wù)端
服務(wù)端項(xiàng)目目錄結(jié)構(gòu) (最基本的 Java Project):
服務(wù)端資源接口WeatherService:
服務(wù)端資源接口實(shí)現(xiàn)類(lèi)WeatherServiceImpl:
@WebService(endpointInterface= "com.jas.websevice.server.WeatherService") public class WeatherServiceImpl implements WeatherService {@Overridepublic String getWeatherInfoByCityName(String cityName) {if("北京".equals(cityName)){return "晴";} else if ("上海".equals(cityName)) {return "小雨";}return "查詢不到對(duì)應(yīng)的天氣信息";} }服務(wù)端開(kāi)啟服務(wù):
public class ServerTest {public static void main(String[] args) {/*** 第一個(gè)參數(shù)是服務(wù)發(fā)布的地址* 第二個(gè)參數(shù)是設(shè)置對(duì)應(yīng)的服務(wù)類(lèi),注意是接口的實(shí)現(xiàn)類(lèi)* 配置完成后直接運(yùn)行該程序即可*/Endpoint.publish("http://localhost:8080/weather", new WeatherServiceImpl());} }當(dāng)開(kāi)啟服務(wù)后我們可以使用 WSDL 來(lái)查看服務(wù)端的配置信息,只需要在瀏覽器輸入http://localhost:8080/weather?wsdl即可訪問(wèn),http://localhost:8080/weather是我們?cè)谏厦嬖O(shè)置的服務(wù)發(fā)布地址。
上面這個(gè) XML 的格式文檔中描述了服務(wù)端口訪問(wèn)方式和使用協(xié)議的細(xì)節(jié),但是只依靠這個(gè)文檔是不能完成服務(wù)調(diào)用的,上面我們也提到了可以根據(jù)這個(gè)文檔來(lái)生成客戶端的代碼。在配置了 jdk 環(huán)境變量的情況下,我們可以使用wsimport命令把上面的文檔信息生成 Java 代碼。
客戶端
首先先創(chuàng)建一個(gè)普通的 Java 工程,在命令模式下進(jìn)到新建 Java 工程的src目錄下,執(zhí)行wsimport -s . http://localhost:8080/weather?wsdl,其中 -s . 表示把代碼生成在當(dāng)前的目錄。生成代碼的過(guò)程中,會(huì)把包名也連帶一起生成。
客戶端生成的代碼:
根據(jù)客戶端生成的代碼我們就可以調(diào)用服務(wù)端的服務(wù)了 (服務(wù)端的程序在開(kāi)啟的情況下)。
public class ClientTest {public static void main(String[] args) {WeatherServiceImplService factory = new WeatherServiceImplService();// 為 WeatherService 生成代理對(duì)象 WeatherService weatherService = factory.getWeatherServiceImplPort();// 調(diào)用 WeatherService 代理對(duì)象的方法來(lái)獲得對(duì)應(yīng)的天氣信息String weatherInfo = weatherService.getWeatherInfoByCityName("上海");System.out.println(weatherInfo);} }控制臺(tái)輸出:
三、總結(jié)
到這里我們應(yīng)該知道什么是 Web service 了,服務(wù)端與客戶端可以是兩個(gè)不同的工程,不管使用什么語(yǔ)言與什么平臺(tái) (PS:上面這個(gè)例子使用的都是 Java),它們之間都可以通過(guò) HTTP 協(xié)議進(jìn)行通信。因此你可以用任何你喜歡的語(yǔ)言,在任何你喜歡的平臺(tái)上寫(xiě) Web service ,只要我們可以通過(guò) Web service 標(biāo)準(zhǔn)對(duì)這些服務(wù)進(jìn)行查詢和訪問(wèn)即可。
參考資料:
http://www.cnblogs.com/Leo_wl/archive/2010/05/20/1740205.html
http://www.ruanyifeng.com/blog/2009/08/what_is_web_service.html
http://blog.csdn.net/feinifi/article/details/77780151
總結(jié)
以上是生活随笔為你收集整理的Web service 介绍与简单应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 退市金玉是做什么的
- 下一篇: 性能远超AtomicLong,LongA