Servlet原理
servlet是由web服務器調用,web服務器在收到瀏覽器請求后,會判斷servlet是否存在,若不存在則裝載創建servlet的實例并初始化(若存在則跳過此步驟),然后調用service方法對請求進行處理。
一、UML
從圖中,可以看出:
1.抽象類HttpServlet繼承抽象類GenericServlet,其有兩個比較關鍵的方法,doGet()和doPost()
2.GenericServlet實現接口Servlet,ServletConfig,Serializable
3.HelloServlet(用戶自定義Servlet類)繼承HttpServlet,重寫抽象類HttpServlet的doGet()和doPost()方法
注:任何一個用戶自定義Servlet,只需重寫抽象類HttpServlet的doPost()和doGet()即可,如上圖的HelloServlet
二、Servlet在容器中的執行過程
Servlet在容器中的執行過程
流程:
瀏覽器向服務器發出GET/Post請求。
服務器上的容器邏輯接收到該url,根據該url判斷為Servlet請求,此時容器邏輯將產生兩個對象:請求對象(HttpServletRequest)和響應對象(HttpServletResponce)
容器邏輯根據url找到目標Servlet,且創建一個線程A。
容器邏輯將剛才創建的請求對象和響應對象傳遞給線程A。
容器邏輯調用Servlet的service()方法。
service()方法根據請求類型調用doGet()或doPost()方法。
doGet()或doPost()執行完后,將結果返回給容器邏輯。
線程A被銷毀或被放在線程池中。
三、Servlet在容器中的生命周期
當Servlet容器啟動時,或者在容器檢測到需要這個Servlet來響應第一個請求時,創建Servlet對象(實例)。
在Servlet實例化之后,容器將調用Servlet的init()初始化這個對象。
Servlet容器調用Servlet的service()方法對請求進行處理。
當容器檢測到一個Servlet實例應該從服務中被移除的時候,容器就會調用實例的destroy(),以便讓該實例可以釋放它所使用的資源,保存數據到持久存儲設備中。當需要釋放內存或者容器關閉時,容器就會調用Servlet實例的destroy()方法。在destroy()方法調用之后,容器會釋放這個Servlet實例,該實例隨后會被Java的垃圾收集器所回收。如果再次需要這個Servlet處理請求,Servlet容器會創建一個新的Servlet實例。
總結
- 上一篇: axure后台示例_AxureUX中后台
- 下一篇: Servlet原理图