Servlet是Java Servlet的簡稱,稱為小服務程序或服務連接器,用Java編寫的伺服器端程序,具有獨立於平台和協議的特性,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容,它通常用於在客戶端運行,結果得到為使用者進行運算或根據使用者互作用定位圖形等服務。而servlet是在什麼時候被銷毀呢?
當伺服器不再需要Servlet實例或重新裝入時,會呼叫destroy方法去銷毀servlet,使用這個方法,Servlet可以釋放掉所有在init方法申請的資源。一個Servlet實例一旦終止,就不允許再次被調用,只能等待被卸載。
順便帶大家一起回想servlet的生命週期:
1.載入與實例化Servlet
啟動Servlet容器時,容器先找一個設定檔web. xml,這個檔案中記錄了可以提供服務的Servlet。每個Servlet被指定一個Servlet名,也就是這個Servlet實際對應的Java的完整class檔名。 Servlet容器會為每個自動裝入選項的Servlet建立一個實例。所以,每個Servlet類別必須有一個公共的無參數的建構器。
2.初始化
當Servlet實例化後,Servlet容器會呼叫每個Servlet的init方法來實例化每個實例,執行完init方法之後,Servlet處於「已初始化”狀態。所以說,一旦Servlet被實例化,那麼必將呼叫init方法。透過Servlet在啟動後不立即初始化,而是收到請求後進行。在web.xml檔中以
初始化失敗後,執行init()方法拋出ServletException異常,Servlet物件將會被垃圾回收器回收,當客戶端第一次存取伺服器時載入Servlet實作類,建立物件並執行初始化方法。
3.請求處理
Servlet 初始化以後,就處於能回應請求的就緒狀態。每個對Servlet 的請求由一個Servlet Request 物件代表。 Servlet 給客戶端的回應由一個Servlet Response物件代表。對於到達客戶機的請求,伺服器會建立特定於請求的一個「請求」物件和一個「回應」物件。呼叫service方法,這個方法可以呼叫其他方法來處理請求。
Service方法會在伺服器被存取時調用,Servlet物件的生命週期中service方法可能被多次調用,由於web-server啟動後,伺服器中公開的部分資源將處於網路中,當網絡中的不同主機(客戶端)並發存取伺服器中的相同資源,伺服器將開設多個執行緒處理不同的請求,多執行緒同時處理同一物件時,有可能出現資料並發存取的錯誤。
另外注意,多執行緒難免同時處理相同變數時(如:對相同檔案進行寫入操作),且有讀寫作業時,必須考慮是否加上同步,同步新增時,不要新增範圍過大,有可能使程式變為純粹的單線程,大大削弱了系統性能;只需要做到多個線程安全的訪問相同的對象就可以了。
4.銷毀Servlet
當伺服器不再需要Servlet實例或重新裝入時,會呼叫destroy方法,使用這個方法,Servlet可以釋放掉所有在init方法申請的資源。一個Servlet實例一旦終止,就不允許再次被調用,只能等待被卸載。
Servlet一旦終止,Servlet實例即可被垃圾回收,處於「卸載」狀態,如果Servlet容器被關閉,Servlet也會被卸載,一個Servlet實例只能初始化一次,但可以創建多個相同的Servlet實例。如相同的Servlet可以在根據不同的配置參數連接不同的資料庫時建立多個實例。
以上是servlet一般什麼時候銷毀的詳細內容。更多資訊請關注PHP中文網其他相關文章!