web Service入門

         首先必須要了解web service是什麼。web service這個詞的字面意思是網絡服務。既然是網絡服務那麼就一定有服務對象。個人認爲web service的服務對象就是我們的應用程序,應用程序可以調用web service所提供的服務來幫助實現應用程序想要實現的功能。舉個例子來說,比如某個應用程序希望實現天氣預報的功能,但開發這樣的功能需要耗費不少的資源包括人力、物力。那麼我們能不能直接使用別人開發好的程序來實現我們想要實現的天氣預報功能呢?答案是肯定的,那就是web service。目前有很多網站提供web service的服務,提供天氣預報功能的web service有很多。web service最大的優勢是跨平臺,跨語言。不管所提供的服務是用什麼語言寫的,也不管調用程序是用什麼語言寫的,都可以實現相互通信。那麼怎麼調用web service呢?我們怎樣才能把自己應用程序的功能封裝成一個web service,它具體是怎麼實現的呢?

        web service的核心是soap和wsdl。soap(simple-object-access-protocol)簡單對象訪問協議,它是基於XML語言的用於網上傳輸的協議,soap以http協議爲基礎。簡單來說,soap就是http + xml。通過soap協議就可以實現兩個應用程序之前的通信,而wsdl(web_service_discription_language)網頁服務描述語言。它是用來描述web服務的一個xml文檔。

           如上圖所示<opration name="sayHi">指的是web service所提供的方法。<service name="HelloServiceService">指的是service的名稱,而<soap:address location="">表示service所在的地址。通過訪問http://localhost:9999/hello?wsdl就可以訪問該服務的wsdl。就可以看到如上所示的wsdl。

           下面簡單些一個基於jdk的webservice。

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class HelloService {
	
	public String sayHello(String name){
		System.out.println("sayHello()...");
		return  "hello " + name;
	}
	
	public String sayHello2(String name){
		return "hello " + name;
	}

	public static void main(String[] args) {
		/**
		 * 參數1:服務的發佈地址
		 * 參數2:服務的實現者
		 */
		Endpoint.publish("http://192.168.1.55:8888/hello", new HelloService());
		System.out.println("Server ready...");
	}
}

上面就是一個用java實現的發佈一個服務。如上例所示,實現一個簡單的webService只要在類的上面加上註釋@webService,而sayHello()則是這個服務所提供的方法以供調用。使用Endpoint的publis()方法就可以將服務發佈出去,發佈地址爲http://192.168.1.55:8888/hello。現在訪問http://192.168.1.55:8888/hello?wsdl就可以看到wsdl文件。

        當看到wsdl文件時就證明現在服務可以被調用。那麼該如何調用這一服務呢,調用一個服務有多種方式。最爲常用的是使用jdk提供的命令,根據wsdl文件可以生成相應的java代碼。使用自動生成的java代碼就可以實現對服務的調用。

       

如上圖所示,在命令行輸入 wsimport -s . +wsdl文件地址就可以自動生成java代碼,所生成的java代碼被存儲在當前目錄文件中。

           

上圖的所有代碼都是由jdk命令自動生成。將所有的java文件拷入項目中。並新建一個java類,如下

public class HellowService {
	public static void main(String[] args){
		HelloServiceService hss = new HelloServiceService();
		HelloService service = hss.getHelloServicePort();
		String resultString = service.sayHello2("leo");
		System.out.println(resultString);
		
	}
}

通過上述方式就可以調用web service所提供的sayHello2方法。


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