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站點。
注意:這個一個成對語言的程式設計

這裡我們要用<meta charset=utf-8> 來指定一下編碼集一般指定為UTF——8 有的是gbk 視情況而定
<html>
<head>
<meta charset=utf-8>
<title>第一個html</title>
</head>
<body>
<h1>定義一個大标題</h1>
顯示正文的資訊
<p> 定義一個段落 </p>
</body>
</html>
<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>
效果圖如下:
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>
效果如下圖:
、
如果我們在這裡使用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() {
}
}