1. 程式人生 > 其它 >How Tomcat Works, A Guide to Developing Your Own Java Servlet Container

How Tomcat Works, A Guide to Developing Your Own Java Servlet Container

1.1 socket網路通訊基礎

客戶端使用主機地址和埠例項化一個socket,此socket通過輸出流將字串等傳向伺服器主機。

伺服器使用埠號例項化一個serverSocket,呼叫accept()方法監聽此埠,等待客戶端的連線。一旦連線成功,就可以獲取到輸入流,將客戶端通過網路傳送的字串讀取到;也可以獲取輸出流,將自己的反饋資訊發給客戶端(客戶端獲取輸入流就可以讀到反饋資訊)。

ServerSocket serverSocket = new ServerSocket("8080",1,"客戶機1");
Socket socket = serverSocket.accept();
input = socket.getInputStream();
// 處理
// ...
output = socket.getOutputStream();

1.2 Http伺服器的原理

http伺服器就是通過以上介紹的原理來接收HTTP請求的,只是它接收到的是完全按照http協議格式的請求字串。在伺服器被連線(accept())後,就可以獲得輸入流和輸出流,使用它們可以例項化一個請求和一個響應物件。

ServerSocket serverSocket = new ServerSocket("8080",1,"客戶機1");
Socket socket = serverSocket.accept();

input = socket.getInputStream();

Request request = new Request(input);

service(request,response);

output = socket.getOutputStream();

Response response = new Response(output);

1.3 Request類

Request類要做的事情就是從輸入流中接收字串,並將一個完全符合http協議的請求字串分解為一個Request物件。

根據上圖,使用indexOf()以及subString()等方法就可以將字串分解,並將各部分的值封裝在Request物件中。

1.4 Response類

Response類需要將響應的字串按照http響應的格式寫到輸出流中去。