本文的主要目的是用一些比較容易懂的語言說明下webservice相關的概念。
1、爲什麼會有webservice
每一項新技術的產生,都是由於被需要。語言發展太多了,各個語言之間不能相互調用,數據無法共享導致了數據不一致。
爲了解決這個問題我們需要一項技術解決異構系統之間的數據共享問題。webservice很成功的解決了這個問題。
2、不同語言之間數據共享需要解決什麼問題
3、目前有哪些技術可以解決上面的問題
4、SOAP協議說明
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文本應該滿足怎樣的格式,因爲這樣才方便解析,做到了統一。