1. 程式人生 > >實現Servlet的三種方式(與GenericServlet、HttpServlet的關係)

實現Servlet的三種方式(與GenericServlet、HttpServlet的關係)

WEB伺服器可以存放資料,他是一個“容器”,作用是接收使用者的請求,再對這個請求做出相應。

Java的Web伺服器必須要支援JSP/Servlet(作為JSP/Servlet的容器)。

所以JSP/Servlet就是JavaWeb伺服器的一套規範。

所以要進行JavaEE開發,就要遵循Servlet規範。

Tomcat就是遵循了JSP/Servlet規範的WEB伺服器

實現Servlet的三種方式

  • 方式一:編寫一個類去實現Servlet介面(必須重寫Servlet接口裡面所有的抽象方法)

  • 方式二:編寫一個類去繼承GenericServlet抽象類(重寫生命週期的service方法(抽象方法))GenericServle抽象類它實現了Servlet介面

    ,還實現了ServletConfig介面(這個介面中提供了一個getServletContext方法)可以在編寫一個類中直接呼叫getServletContext方法就可以獲得ServletContext物件。(開發中不常用)

  • 方式三:編寫一個類去繼承HttpServlet抽象類(沒有抽象方法!根據頁面的提交方式決定重寫doGet或者doPost方法)

談到這三種方式就要說一下Servlet介面抽象類GenericServlet抽象類HttpServlet的關係

關係說明:

Servlet介面中定義了一些方法,這些方法與Servlet的生命週期有關

在這裡插入圖片描述

當用戶第一次訪問Servlet的時候,由伺服器容器Tomcat來建立Servlet例項物件(呼叫的無參構造)!在整個Servlet生命週期中只會建立一次!一旦建立完畢,立即呼叫**init(ServletConfig config)方法完成Servlet的初始化!該方法在整個Servlet生命週期中只會執行一次!緊接著呼叫

service(ServletRequest request,ServletResponse response)服務方法處理使用者請求,該方法在整個Servlet生命週期中執行N次(每請求一次執行一次)當伺服器關閉之前呼叫destroy()**方法來銷燬Servlet例項物件!!!該方法在整個Servlet生命週期中只會執行一次!

初始化方法init()中的ServletConfig物件是作為生命週期初始化方法init的引數
SerlvetConfig物件:代表的是當前Servlet初始化配置項的資訊

利用ServletConfig物件主要是為了得到Context物件。(Context物件可以幫助我們與使用者進行互動)

獲得指定初始化引數的值: String getInitParameter(String name); 【需要在web.xml檔案中進行配置】
獲得所有初始化引數的名稱: Enumeration getInitParameterNames();【需要在web.xml檔案中進行配置】
獲得ServletContext物件:ServletContext getServletContext();
獲得當前Servlet的名稱: String getServletName();

GenericServlet

GenericServlet是一個抽象類,它實現了Servlet介面,並且還實現了ServletConfig介面,ServletConfig介面中直接提供了getServletContext方法,所以當我們在實現Servlet時直接繼承GenericServlet這個抽象類,就可以直接使用getServletContext方法來獲取Context物件了。

HttpServlet

HttpServlet也是一個抽象類,但是他內部沒有抽象方法(有抽象方法的類一定是抽象類,但抽象類中不一定有抽象方法),他又繼承了GenericServlet抽象類,所以具有了GenericServlet的優點。在實現Servlet介面時,直接繼承HttpServlet抽象類,再根據網頁提交的方式確定使用doGet()方法還是doPost()方法

圖解

在這裡插入圖片描述