網絡編程&Http協議&Tomcat模擬

網絡編程&Http協議&Tomcat模擬

網絡編程

1、計算機網絡

概述:將各個地理位置的計算機通過外部設備連接在一起形成的系統網絡

作用:實現數據的共享,信息的傳遞

IP地址:IP地址是計算機的唯一表示,要連接計算機依靠的是IP地址,一個網絡環境中不可以有兩個相同IP地址的電腦(IP地址衝突)

Port端口:要連接一臺計算機用IP,要連接計算機中的某一個程序,用端口區分;一臺計算機中不允許有兩個相同端口號的程序(端口號衝突)

域名:eg. www開頭網址,實際訪問過程中不適用IP,而是使用域名,因爲IP地址不好記

URL:統一資源定位符

2、獲取網頁數據

URL和XML解析

3、通信
TCP傳輸控制協議

1.可靠傳輸協議(安全性高)

2.每次通信之前都要連接一次(雙向連接),三次握手,四次揮手

3.基於流的傳輸

4.傳輸效率低

UDP用戶數據協議

1.不可靠傳輸協議(不太安全)

2.基於數據報的傳輸

3.傳輸效率較高

TCP編程

1.服務端ServerScoket

accept():監聽客戶端的連接(是一個阻塞方法:監聽到客戶端的連接就解除阻塞)

2.客戶端Scoket

獲取輸入流:用於讀

獲取輸出流:用於寫

TCP通信案列
步驟

1.先創建服務器(指定端口)
2.監聽客戶端的連接(accept())
3.創建客戶端(IP + 端口號),並連接服務器
4.服務器監聽到客戶端之後返回一個Scocket對象
5.讓服務端循環監聽客戶端的接入
6.讓客戶端給服務端發送一句話
7.服務端返回客戶端

HTTP協議

1.協議:指定了數據傳送的一些規範
2.Tcp/ip協議:是傳輸/網絡層的協議:注重數據的傳輸
3.ttp協議:是應用層的協議,注重數據的包裝
4.分類:
1.Http1.0
一次連接,一次請求,一次響應
2.Http1.1
長連接狀態,一次連接(多次請求,多次響應)
效率提升了
5.請求request
1.請求行(請求方法 uri 協議的版本)
2.請求頭(告訴服務器的一些信息)
3.請求體
get請求的請求體沒有東西
post請求如果有數據提交,數據就放在此處

6.響應response
1.響應行/狀態行(協議版本 狀態碼 狀態描述)
2.響應頭(告訴瀏覽器的一些信息)
3.響應體:響應給請求的一些數據(html,image,json,xml,string)
7.Get和Post區別
1.Get請求會將請求的參數放在地址欄上
不安全
數據有大小限制
什麼時候會發送get請求
直接在地址欄中輸入地址
表單的默認提交
超鏈接
2.Post請求將請求參數放在請求體中
相對安全
數據沒有限制(文件上傳必須用post請求)
什麼時候會發送post請求
設置表單的method屬性值爲post

Tomcat模擬

public class TomcatServer {
	private ServerSocket server;

	public TomcatServer() throws IOException {
		System.out.println("初始化服務器");
		server = new ServerSocket(8088);
		// 執行業務方法(將login.html頁面用流的寫出去)
		System.out.println("服務器初始化成功");
		start();
		server.close();

	}

	public void start() throws IOException {
		// 1.監聽客戶端的連接
		Socket socket = server.accept();

		// 創建輸入流,用於讀取文件
		File file = new File("D:/Java/WebWorkspace/2019_8_16_html&css/WebContent/08_homework.html");
		FileInputStream in = new FileInputStream(file);
		InputStreamReader isr = new InputStreamReader(in, "UTF-8");
		BufferedReader br = new BufferedReader(isr);

		// 創建輸出流
		OutputStream out = socket.getOutputStream();
		OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");
		PrintWriter pw = new PrintWriter(osw, true);

		// 將數據打包
		pw.println("HTTP/1.1 200 OK");
		pw.println("Content-Type: text/html;charset=utf-8");
		pw.println("Content-Length:" + file.length());
		pw.println();

		// 複製(讀一行,寫一行)
		String len = null;
		while ((len = br.readLine()) != null) {
			pw.println(len);
		}

		pw.close();
		br.close();

	}

	public static void main(String[] args) throws IOException {
		while (true) {
			new TomcatServer();
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章