1. 程式人生 > >Java web server 基本實現原理

Java web server 基本實現原理

tro 主線程 inpu 請求報文 永遠 原理 args ket io阻塞

public class WebServer {

    //服務端Socket只要一個,所以定義成static, 同一時間只能一個線程訪問(主線程)
    private static ServerSocket ss;

    public static void main(String[] args) throws IOException {
        //綁定端口,只會執行一次
        ss = new ServerSocket(8999); //遠端服務器使用ServerSocket技術打開一個端口,等待請求的到來
//主線程永遠不死,所以用了個死循環 while
(true) { //這是一個IO阻塞式語句,也就是如果沒有請求(IO操作)進來,當前線程會在此等待,不再向下執行 Socket socket = ss.accept();          // socket:(本機IP+ 本機端口 +服務端IP+ 服務端端口,用來唯一標示一條TCP聯接)通道
//得到請求報文(內容) StringBuffer sb = new StringBuffer(); PrintWriter pw = null; try { InputStream socketIn
= socket.getInputStream(); //從通道socket上獲得流 BufferedReader br = new BufferedReader(new InputStreamReader(socketIn)); while(true) { String msg = br.readLine(); sb.append(msg); System.out.println(msg);
if (msg == null || msg.trim().equals("")) { break; } } //輸入響應報文 pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));           // 所發送HTTP數據包
pw.println(
"HTTP/1.1 200 OK"); pw.println("Content-Type: text/html;charset=UTF-8"); pw.println(); pw.write("html"); pw.flush(); } catch (IOException exception) { //TODO 處理異常 } finally { socket.close(); pw.close(); //socket = null; } } } }
servlet 是單例的 只初始化一次
可以在Web.xml中配置
<init-param> <param-name></param-name> <param-value></param-value> </init-param>
然後在servlet的init函數中獲得參數
config.getInitParameter();

publicclass WebServer {


//服務端Socket只要一個,所以定義成static, 同一時間只能一個線程訪問(主線程)

privatestatic ServerSocket ss;


publicstaticvoid main(String[] args) throws IOException {

//綁定端口,只會執行一次

ss = new ServerSocket(8999);

//線程永遠不死,所以用了個死循環

while (true) {

//這是一個IO阻塞式語句,也就是如果沒有請求(IO操作)進來,當前線程會在此等待,不再向下執行

Socket socket = ss.accept();



//得到請求報文(內容)

StringBuffer sb = new StringBuffer();

PrintWriter pw = null;

try {

InputStream socketIn = socket.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(socketIn));

while(true) {

String msg = br.readLine();

sb.append(msg);

System.out.println(msg);

if (msg == null || msg.trim().equals("")) {

break;

}

}

//輸入響應報文

pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));


pw.println("HTTP/1.1 200 OK");

pw.println("Content-Type: text/html;charset=UTF-8");

pw.println();


pw.write("html");

pw.flush();


} catch (IOException exception) {

//TODO處理異常

} finally {

socket.close();

pw.close();

//socket = null;

}

}

}

}

Java web server 基本實現原理