淺談servlet的生命週期

servlet的生命週期是servlet相關知識中很重要的一部分。web


servlet從被加載到銷燬經歷了多個階段,其中須要咱們十分了解每一個階段的意義做用,才能更好地編寫相關的servlet程序。數據庫

servlet的生命週期詳解

下圖很好的說明了servlet的各個階段函數


Paste_Image.png


  • 首先,容器加載servlet類,從class字節碼加載類
  • 隨後初始化servlet,使之成爲一個對象!servlet的無參構造函數運行,這裏不須要咱們本身寫構造函數,只須要使用編譯器的提供的默認構造函數便可(** 至關於new操做 ,成爲一個對象**),值得注意的是,此處的只是一個普通的對象,還不具有成爲一個完整servlet的一些信息和功能,因此咱們要進行下一步,也就是init()方法。
  • 調用init()方法,此方法只在servlet的一輩子中調用一次,並且必須在容器調用service()以前完成。這一步主要是讓上一步對象加上一些東西,使之再也不是一個普通的對象,而是一個特殊的servlet對象。
  • 調用service()方法,servlet的一輩子主要都在這裏度過,處理用戶請求,每一個請求在一個單獨的線程裏運行。
  • 調用destroy()方法,容器調用這個方法,從而在servlet被殺死以前有機會清理資源。與init同樣,destroy也只能調用一次。

servlet生命週期中三大重要的時刻

  1. init() 什麼時候調用:servlet實例建立後,並在servlet能爲客戶請求提供service服務前,容器要對servlet調用init。 做用: 使你在servlet處理客戶請求以前有機會對其進行初始化 是否覆蓋: 有可能。若是由初始化代碼(如獲得一個數據庫鏈接),就要調用init()方法線程

  2. service() 什麼時候調用: 第一個客戶請求到來時,容器會開始一個新線程,或者從線程池分配一個線程,並調用servlet的service()方法。 做用: 這個方法會查看請求,肯定http方法 是否覆蓋: 不太可能對象

  3. doGet或者doPost 什麼時候調用: service方法根據請求的http方法調用doGet或者doPost。 做用: 要在這裏寫代碼,你的web須要實現的業務邏輯等 是否覆蓋: 必定要覆蓋其中之一。生命週期

** 每一個請求在一個單獨的線程裏運行。容器不關心是誰的請求,每一個到來的請求意味着一個新的線程。ip

相關文章
相關標籤/搜索