1. 程式人生 > >Tomcat學習之Servelet容器如何呼叫Servlet

Tomcat學習之Servelet容器如何呼叫Servlet

本章學習了一個簡單的Servlet容器,簡述包含以下幾個類及其作用:
1、Server類
該類用來啟動一個ServerSocket用來監聽來自於客戶端的請求。
2、Request類
該類設定socket.inputStream()作為自己的私有變數,按照http協議解析來自客戶端的請求。包括獲取請求方法,請求的uri等方法。
3、Response類
該類將Request物件和socket.outputStream()作為自己的成員,可以接處理自request的靜態請求,並將返回的內容輸出。
4、Servlet類
該類繼承與Servlet介面,用來處理實際的請求。實現了Servlet的init、service、destroy等介面。

下面重點來了,當接受到來自客戶端的請求後,servlet容器是如何啟動該servlet的。該章中講解的比較簡單,沒有涉及到servlet的xml配置檔案。
第一步:首先根據http的請求url,該url的格式做如下約定http://xxx/servlet/servlet-package,及servlet表示這是一個動態請求,要用到servlet來處理,servlet-package表示該servlet所在的包。
第二步:根據servlet的所在包,利用ClassLoader來載入該類的Class物件,然後利用Class物件的newInstance()方法,新建該類的例項。因為該Servlet類實現了Servlet介面,因此可以將該例項向上轉型,作為Servlet介面型別。
第三步:呼叫Servlet介面的service()方法來處理實際的請求,即實際上呼叫了根據包名被載入的servlet(也就是實際處理該http請求的servlet)。至此,servlet容器成功呼叫了需要處理該請求的servlet物件。