1.HttpServlet
1). 是一個 Servlet, 繼承自 GenericServlet. 針對於 HTTP 協議所定制.
2). 在 service() 方法中直接把 ServletReuqest 和 ServletResponse 轉為 HttpServletRequest 和 HttpServletResponse.
並調用了重載的 service(HttpServletRequest, HttpServletResponse)
在 service(HttpServletRequest, HttpServletResponse) 獲取了請求方式: request.getMethod(). 根據請求方式有創建了
doXxx() 方法(xxx 為具體的請求方式, 比如 doGet, doPost)
3). 實際開發中, 直接繼承 HttpServlet, 並根據請求方式復寫 doXxx() 方法即可.
4). 好處: 直接由針對性的覆蓋 doXxx() 方法; 直接使用 HttpServletRequest 和 HttpServletResponse, 不再需要強轉.
2.GenericServlet
1). 是一個 Serlvet. 是 Servlet 接口和 ServletConfig 接口的實現類. 但是一個抽象類. 其中的 service 方法為抽象方法
2). 如果新建的 Servlet 程序直接繼承 GenericSerlvet 會使開發更簡潔.
3). 具體實現:
①. 在 GenericServlet 中聲明了一個 SerlvetConfig 類型的成員變量, 在 init(ServletConfig) 方法中對其進行了初始化
②. 利用 servletConfig 成員變量的方法實現了 ServletConfig 接口的方法
③. 還定義了一個 init() 方法, 在 init(SerlvetConfig) 方法中對其進行調用, 子類可以直接覆蓋 init() 在其中實現對 Servlet 的初始化.
④. 不建議直接覆蓋 init(ServletConfig), 因為如果忘記編寫 super.init(config); 而還是用了 SerlvetConfig 接口的方法,
則會出現空指針異常.
⑤. 新建的 init(){} 並非 Serlvet 的生命周期方法. 而 init(ServletConfig) 是生命周期相關的方法.
如果為了開發一個能用在網頁上服務於使用HTTP協議請求的Servlet,你的Servlet必須要繼承自HttpServlet
