servlet生命週期和工作原理

轉自:servlet生命週期和工作原理

Servlet生命週期分爲三個階段:
1:初始化階段,調用init()方法
2:響應客戶請求階段,調用service()方法
3:終止階段,調用destory()方法

1:Servlet的生命週期指的是 Servlet從被Web服務器加載到它被銷燬的整個生命過程

Web服務器加載Servlet:Web服務器啓動後,它會根據每個工程的web.xml文件去查找該工程的Servlet,並且找到這些Servlet的Class文件所在的地址,將它們載入到Web容器中,不同的Servlet被Web容器加載的次序不同,通過web.xml文件可以配置每個Servlet載入的次序。一般來說,Servlet在服務器啓動時就會被Web服務器加載,而JSP文件只有在用戶訪問到該頁面時纔會被動態載入。

創建一個Servlet實例:這時會調用該Servlet的構造函數去創建一個具體的對象。
經過以上的兩個步驟後,這時如果有客戶端請求,Web服務器就會調用Servlet對象的init()方法
接着Web服務器調用Servlet的service()方法去接收請求,處理請求,並把處理結果返回。
銷燬:Servlet實例被銷燬,這是通過調用Servlet的destory()方法來實現的。

在以上的幾個階段中,Servlet對外提供服務階段最重要的。service()方法是編程人員真正要關心的方法,因爲它纔是Servlet真正開始響應客戶端請求,並且處理業務邏輯的方法。Service()接收到客戶端請求後,再調用Servlet的doGet()方法或者doPost()方法去處理請求。所以在編寫自己的Servlet時,一般只需要重寫doGet()和doPost()方法,在該方法中去處理客戶端請求,並把處理結果返回。

這裏寫圖片描述
步驟:
1:Web Client向Servlet容器(tomcat)發出Http請求
2:Servlet容器接收Web Client的請求
3:Servlet容器創建一個HttpRequest對象,將Web Client請求的信息封裝到這個對象中。
4:Servlet容器創建一個HttpResponse對象
5:Servlet容器調用HttpServlet對象的service方法,把HttpRequest對象與HttpResponse對象作爲參數傳遞給HttpServlet對象。
6:HttpServlet調用HttpRequest對象的有關方法,獲取Http請求信息
7:HttpServlet調用HttpResponse對象的有關方法,生成響應數據
8:Servlet容器把HttpServlet的響應結果傳入Web Client。

工作原理:

先解釋Servlet接收和響應客戶請求的過程,首先客戶發送個請求,Servlet容器會創建特定於這個請求的ServletRequest對象和ServletResponse對象,然後調用Servlet的service()方法。Service()方法從ServletRequest對象獲得客戶請求信息,處理該請求,然後通過ServletResponse對象向客戶返回響應信息。

創建Servlet對象的時機

1:Servlet容器啓動時:讀取web.xml配置文件中的信息,構造指定的Servlet對象,創建ServletConfig對象,同時將ServletConfig對象作爲參數來調用Servlet對象的init方法。
2:在Servlet容器啓動後:客戶首次向Servlet發出請求,Servlet容器會判斷內存中是否存在指定的Servlet對象,如果沒有則創建它,然後根據客戶的請求創建HttpRequest、HttpResponse對象,從而調用Servlet 對象的service方法。
3:Servlet Servlet容器在啓動時自動創建Servlet,這是由在web.xml文件中爲Servlet設置的<load-on-startup>屬性決定的。從中我們也能看到同一個類型的Servlet對象在Servlet容器中以單例的形式存在。

<servlet>
        <servlet-name>Init</servlet-name>
        <servlet-class>org.xl.servlet.InitServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>
  • 1
  • 2
  • 3
  • 4
  • 5

參考博客:
http://www.cnblogs.com/xuekyo/archive/2013/02/24/2924072.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章