1.繼承關系:
javax.servlet.Servlet接口->javax.servlet.GenericServlet抽象類
->javax.servlet.http.HttpServlet抽象子類
2.相關方法:
javax.servlet.Servlet:
(1)void init(config)? ?-初始化方法
(2)void service(request, response) -服務方法? ?(這是個抽象方法,在HttpServlet中進行實現)
(3)void destroy() -銷毀方法
主要說說這個service方法:它在實現時首先要有一個獲取申請方式的操作:
String method = request.getMethod();
根據if判斷,請求方式1不同,調用相應的do方法
而在這個HttpServlet中,do方法都差不多,需要自己去自己的servlet中改寫do方法,不然未改寫而貿然請求會報錯
3.servlet的生命周期:
(1)servlet的生命周期對應三個方法? ?init() service() destroy()
(2)默認情況下,收到請求后開始實例化,初始化,并開始服務,后面只是開啟服務,調用service方法;這種方式的啟動速度很快,但是響應速度,特別是第一個用戶的響應速度很慢,我們可以通過設置<load-on-startup>數字<load-on-startup>來設置servlet的啟動先后順序,這樣設置后啟動服務器時會耗時更多,因為啟動即創建實例,初始化,但后續的響應速度很快,而且很公平;(其中數字越小,越先啟動,0最小)
所以一個servlet類只會創建一個實例,即單例的;這種單例設計模式有弊端:線程不安全;
下面有個圖:
所以我們一般不建議servlet類中定義成員變量,即使非要定義,也不要用它來做邏輯判斷;