How Tomcat Works, A Guide to Developing Your Own Java Servlet Container
阿新 • • 發佈:2022-05-04
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響應的格式寫到輸出流中去。