天天看點

手寫HttpServerDemo01_準備Server_html基本知識的介紹_html的簡單應用_day_35

1.HttpServer的準備階段:

package Demo01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	private ServerSocket server;
	public static final String NEWLINE = "\r\n";
	public static final String BLANK = " ";

	public static void main(String[] args) {
		Server ser = new Server();
		ser.start(9999);
		ser.receive();
	}

	/**
	 * 伺服器的啟動 可以自己設定伺服器的端口号
	 */
	public void start(int port) {
		try {
			server = new ServerSocket(port);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 伺服器的啟動 伺服器的端口号預設為6666
	 */
	public void start() {
		this.start(6666);
	}

	/**
	 * 接收用戶端
	 */
	public void receive() {
		try {
			Socket client = server.accept();
			StringBuilder sb = new StringBuilder();// 将接收到的資訊處理完的放進這裡面
			String message = null;// 接收到的資訊

			BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
			while ((message = br.readLine()) != null) {// 循環讀取讀取出來的東西都放到sb裡面
				sb.append(message);// 每次讀取一行存進去
				sb.append(NEWLINE);// 換行
			}
			String requestInfo = sb.toString().trim();// trim()是String的方法 是以先調用toString将StringBuilder轉為String 去除空格
			// System.out.println(requestInfo);//列印一下看一下效果
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 停止伺服器
	 */
	public void stop() {

	}

}
           

2.HTML的簡單介紹:

超文本标記語言(HyperText Markup Language):是一種用于建立網頁的标準标記語言,可以用來建立web站點。 

注意:這個一個成對語言的程式設計

手寫HttpServerDemo01_準備Server_html基本知識的介紹_html的簡單應用_day_35

這裡我們要用<meta charset=utf-8>   來指定一下編碼集一般指定為UTF——8   有的是gbk  視情況而定

<html>
	<head>
	<meta  charset=utf-8>
		<title>第一個html</title>
	</head>
	<body>
		<h1>定義一個大标題</h1>
		顯示正文的資訊
		<p> 定義一個段落 </p>
	</body>
</html>
           
手寫HttpServerDemo01_準備Server_html基本知識的介紹_html的簡單應用_day_35
<html>
	<head>
	<meta  charset=utf-8>
		<title>第一個html</title>
	</head>
	<body>
		<h1>定義一個大标題(一級标題)</h1>
		<h2>這是一個二級标題</h2>
		<hr />  <!--這是一條水準線-->
		<font size = "4">用4号字型顯示正文<br>的資訊</font>
		<p> 定義一個段落 </p>
	</body>
</html>
           

效果圖如下:

手寫HttpServerDemo01_準備Server_html基本知識的介紹_html的簡單應用_day_35

3.HTML的簡單應用:

       method:請求方式 get/post  

get: 預設方式,資料量小,安全性不高

post:量大,安全性相對高

action:請求的伺服器路徑

id:編号,前端區分唯一性 ,js中經常使用

name:名稱,後端(伺服器)區分唯一性 ,擷取值

隻要送出資料給背景,必須存在name

<html>
	<head>
	<meta  charset=utf-8>
		<title>第一個表單</title>
	</head>
	<body>
		<pre>
		method:請求方式 get/post  
			get: 預設方式,資料量小,安全性不高
			post:量大,安全性相對高
		action:請求的伺服器路徑
		id:編号,前端區分唯一性 ,js中使用
		name:名稱,後端(伺服器)區分唯一性 ,擷取值
		隻要送出資料給背景,必須存在name
		</pre>
		<form method="post" action="http://localhost:8888/index.html">
			使用者名:<input type="text" name="uname" id="uname"/>
			密碼:<input type="password" name="pwd" id="pwd"/>
			<input type="submit" value="登入"/>
		</form>
	</body>
</html>
           

效果如下圖:

手寫HttpServerDemo01_準備Server_html基本知識的介紹_html的簡單應用_day_35

如果我們在這裡使用get他的安全性不高  賬号和密碼都會在網址的參數後面顯示,可以擷取到使用者名和密碼;

如果是post方法我們就沒法擷取到賬号和密碼   我們應該用位元組流讀;

改動後如下:

隻是receive改動了一下,改了一下讀取方式;

package Demo01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server2 {
	private ServerSocket server;
	public static final String NEWLINE = "\r\n";
	public static final String BLANK = " ";

	public static void main(String[] args) {
		Server2 ser = new Server2();
		ser.start(8888);
	}

	/**
	 * 伺服器的啟動 可以自己設定伺服器的端口号
	 */
	public void start(int port) {
		try {
			server = new ServerSocket(port);
			this.receive();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 伺服器的啟動 伺服器的端口号預設為6666
	 */
	public void start() {
		this.start(6666);
	}

	/**
	 * 接收用戶端
	 */
	private void receive() {
		try {
			Socket client = server.accept();
			//StringBuilder sb = new StringBuilder();// 将接收到的資訊處理完的放進這裡面
			//String message = null;// 接收到的資訊

			//BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
			//while ((message = br.readLine()).length() > 0) {// 循環讀取讀取出來的東西都放到sb裡面
			//	sb.append(message);// 每次讀取一行存進去
			//	sb.append(NEWLINE);// 換行
			//}
			//String requestInfo = sb.toString().trim();// trim()是String的方法 是以先調用toString将StringBuilder轉為String 去除空格
			//System.out.println(requestInfo);//列印一下看一下效果
			//我們這裡直接用位元組流進行讀取
			byte[] data = new byte[20480];//一次性讀取完;
			int length = client.getInputStream().read(data);
			String requestInfo=new String(data,0,length).trim();	
			System.out.println(requestInfo);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 停止伺服器
	 */
	public void stop() {

	}

}