上一篇,我們講解了如果開發一個簡單的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裡運作結果
