【WebService】第一章、爲什麼會有webservice以及相關概念說明

本文的主要目的是用一些比較容易懂的語言說明下webservice相關的概念。

1、爲什麼會有webservice

      每一項新技術的產生,都是由於被需要。語言發展太多了,各個語言之間不能相互調用,數據無法共享導致了數據不一致。

爲了解決這個問題我們需要一項技術解決異構系統之間的數據共享問題。webservice很成功的解決了這個問題。

2、不同語言之間數據共享需要解決什麼問題

      1. 傳輸的數據可以跨平臺,誰都認識它。
      2. 提供的服務要能很方便調用最好像網站那樣可以什麼瀏覽器什麼操作系統都可以訪問。

3、目前有哪些技術可以解決上面的問題

      1. json與xml每個語言都認識還可以解析。所以我們只要傳送json或者xml這種格式的數據就行了。
      2. 如果我們把服務部署在web站點上是不是可以做到像訪問網站那樣方便呢?如果可以,那應該叫web服務(web service)偷笑

4、SOAP協議說明

      協議就是一種規定,協議的存在就是爲了規範。試想一下,如果每個人都按照自己的想法去傳輸數據,那麼誰能知道傳
的是什麼東西,即便你獲取數據了你也不知道那是什麼意思。所以我們需要制定一份協議,大家都遵守這個協議就能很好的
統一,解析也很方便了。爲了說明SOAP協議,下面將詳細的說明數據的傳輸以及與之相關的HTTP協議。

5、Socket通信

      ISO七層模型:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。

      Socket屬於傳輸層的,也就是說這個技術用來傳輸數據。它只會傳輸數據,如果我們傳輸的數據恰好滿足了某種特定的格式。

對於數據需要滿足的格式,我們稱爲協議。例如:HTTP協議,SOAP協議。下面寫個socket的例子說明下。

package com.ztesoft.socket;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
// 服務端提供服務,接受到客戶端提供字母后轉大寫在返回給客戶端
public class SocketServer {
	public static void main(String[] args) throws Exception {
		ServerSocket ss = new ServerSocket(6666);
		while (true) {
			Socket sc = ss.accept();
			InputStream is = sc.getInputStream();
			byte[] buffer = new byte[1024];
			int len = -1;
			len = is.read(buffer);
			String getData = new String(buffer, 0, len);
			System.out.println("從客戶端獲取的數據:\n" + getData);
			// 業務處理 大小寫轉化
			String outPutData = getData.toUpperCase();
			// 向客戶端寫數據
			OutputStream os = sc.getOutputStream();
			os.write(outPutData.getBytes("UTF-8"));
			// 釋放資源
			os.close();
			is.close();
			sc.close();
		}
	}
}
package com.ztesoft.socket;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

// 向服務端發送一個請求,並接受返回結果
public class SocketClient {
	public static void main(String[] args) throws Exception {
	
		// 開啓一個Socket端口
		Socket sc = new Socket("127.0.0.1", 6666);
		OutputStream os = sc.getOutputStream();
		os.write("abc".getBytes());

		// 獲取服務端回傳的數據
		InputStream is = sc.getInputStream();
		byte[] buffer = new byte[1024];
		int len = -1;
		len = is.read(buffer);
		String getData = new String(buffer, 0, len);
		System.out.println("從服務端獲取的數據:" + getData);
		// 釋放資源
		is.close();
		os.close();
		sc.close();
	}
}

      下圖左側就是調用結果,從中我們可以發現socket只是調用了更底層的方法去傳輸數據。如果我們從瀏覽器訪問(右側)

            

      如果我們採用socket通信,當我們寫代碼的時候可能很不方便,就像我們會採用一些持久層框架。例如mybatis而不去直接使用jdbc。

所以爲了更方便的傳輸數據就有了HTTP這個東西。我們從瀏覽器訪問就會看到上圖右側的東西,他就是用HTTP訪問的。我們可以

簡答的理解爲HTTP就是對socket的一種封裝。它傳遞的數據滿足HTTP協議的要求,可以更方便我們開發。

      所以我們可以總結出以下幾點:

      1. socket是大多數通訊協議實現傳輸數據的基礎。

      2. HTTP是對socket的進一步封裝,可以提高我們的開發效率。

      3. SOAP協議其實就是規定了XML文本應該滿足怎樣的格式,因爲這樣才方便解析,做到了統一。

6、WSDL告訴別人如何調用服務

      從上面我們知道,數據的傳輸以及數據需要滿足的格式。那麼別人通過什麼可以找到你這個服務該怎麼調用呢?你是不是需要寫個文檔
描述下你發佈的服務呢?
      爲了描述我們發佈的服務我們需要寫一個文件。我們叫他WSDL也就是Web Services Description Language(描述你發佈服務的一種語言)
這是一種規範啊。統一的東西你學一次就可以了,不統一的東西你得不停的學,因爲沒規律啊。
      WSDL是一個xml的文檔,裏面描述了服務的請求地址,用了什麼協議,提供了哪些方法,方法參數是什麼等信息。

7、總結

      Web Service 就是發佈在web上的服務。使用http傳遞數據。傳遞的數據是滿足soap協議規範的xml文檔。
使用wsdl描述發佈信息讓別人能看懂怎麼去調用。 webservice = http + soap + wsdl
發佈了54 篇原創文章 · 獲贊 67 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章