天天看點

深入剖析tomcat之一個簡單的servlet容器

上一篇,我們講解了如果開發一個簡單的http伺服器,這一篇,我們擴充一下,讓我們的伺服器具備servlet的解析功能。

簡單介紹下servlet接口

如果我們想要自定義一個servlet,那麼我們必須繼承servlet,并且實作下面幾個重要的方法

五個方法中,init,destroy,service都是和servlet的生命周期相關的方法。當執行個體化某個servlet類之後,servlet會調用init進行初始化,當servlet的請求到達之後,就會調用service方法,并将servletrequest和servletresponse對象作為參數傳入,前者包含用戶端的http請求的資訊,後者包含伺服器的響應資訊。

這個簡單的servlet容器的流程如下

等待http請求

對應的servletrequest對象和servletresponse對象,

判斷請求的類型,如果是請求靜态資源,則找到靜态資源的檔案,傳回給用戶端

如果是servlet請求,載入servlet類,調用service()方法,傳入servletrequest對象和servletresponse對象

涉及到的主要的類

simpleservletcontainerserver

request

response

servlet

primitiveservlet

staticprocessor

servletprocessor

關于request和response的定義在上一篇幅有定義,這裡我們稍微擴充了一下,礙于篇幅,不在這裡展示。

primitiveservlet類,繼承自servlet,servlet請求的處理類

類定義:

simpleservletcontainerserver 類

功能:程式入口,監聽http請求,并且負責建立request和response

類定義

我們引入了staticprocessor和servletprocessor進行邏輯的處理,我們看下這兩個類的定義

首先這兩個類都繼承自iprocessor接口

staticprocessor類主要是處理靜态資源請求

serveletprocessor主要負責處理servlet請求,初始化的時候,初始化所有的servlet子類,接收到servlet的http請求之後,根據請求名稱,調用對應的service函數。

結果

我們在eclipse裡運作結果

深入剖析tomcat之一個簡單的servlet容器
深入剖析tomcat之一個簡單的servlet容器