Sun 公司提供了一系列的接口和類用于 Servlet 技術的開發,其中最重要的接口是 javax.servlet.Servlet。在 Servlet 接口中定義了 5 個抽象方法,如表 1 所示。
表 1 Servlet接口的抽象方法
方法聲明 |
功能描述 |
---|---|
void init(ServletConfig config) |
容器在創建好 Servlet 對象后,就會調用此方法。該方法接收一個 ServletConfig 類型的參數,Servlet 容器通過該參數向 Servlet 傳遞初始化配置信息 |
ServletConfig getSendetConfig() |
用于獲取 Servlet 對象的配置信息,返回 Servlet 的 ServletConfig 對象 |
String getServletInfo() |
返回一個字符串,其中包含關于 Servlet 的信息,如作者、版本和版權等信息 |
voidservice (ServletRequest request,ServletResponse response) |
負責響應用戶的請求,當容器接收到客戶端訪問 Servlet 對象的請求時,就會調用此方法。容器會構造一個表示客戶端請求信息的 ServletRequest 對象和一個用于響應客戶端的 ServletResponse 對象作為參數傳遞給 service() 方法。 在 service() 方法中,可以通過 ServletRequest 對象得到客戶端的相關信息和請求信息,在對請求進行處理后,調用 ServletResponse 對象的方法設置響應信息 |
void destroy() |
負責釋放 Servlet 對象占用的資源。當服務器關閉或者 Servlet 對象被移除時,Servlet 對象會被銷毀,容器會調用此方法 |
在表 1 中,列舉了 Servlet 接口中的五個方法,其中 init()、service() 和 destroy() 方法可以表現 Servlet 的生命周期,它們會在某個特定的時刻被調用。
針對 Servlet 的接口,Sun 公司提供了兩個默認的接口實現類:GenericServlet 和 HttpServlet。其中,GenericServlet 是一個抽象類,該類為 Servlet 接口提供了部分實現,它并沒有實現 HTTP 請求處理。
HttpServlet 是 GenericServlet 的子類,它繼承了 GenericServlet 的所有方法,并且為 HTTP 請求中的 GET 和 POST 等類型提供了具體的操作方法。通常情況下,編寫的 Servlet 類都繼承自 HttpServlet,在開發中使用的也是 HttpServlet 對象。
HttpServlet 類中包含兩個常用方法,這兩個方法的說明如表 2 所示。
表 2 HttpServlet 類的常用方法
方法聲明 |
功能描述 |
---|---|
protected void doGet (HttpServletRequest req, HttpServletResponse resp) |
用于處理 GET 類型的 HTTP 請求的方法 |
protected void doPost(HttpServletRequest req, HttpServletResponse resp) |
用于處理 POST 類型的 HTTP 請求的方法 |
HttpServlet 主要有兩大功能,具體如下。
① 根據用戶請求方式的不同,定義相應的 doXxx() 方法處理用戶請求。例如,與 GET 請求方式對應的 doGet() 方法,與 POST 方式對應的 doPost() 方法。
② 通過 service() 方法將 HTTP 請求和響應分別強轉為 HttpServletRequest 和 HttpServletResponse 類型的對象。
需要注意的是,由于 HttpServlet 類在重寫的 service() 方法中,為每一種 HTTP 請求方式都定義了對應的 doXxx() 方法,因此,當定義的類繼承 HttpServlet 后,只需要根據請求方式重寫對應的 doXxx() 方法即可,而不需要重寫 service() 方法。