您好,登錄后才能下訂單哦!
java中servlet的生命周期?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!
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文件中用<load-on-statup> ...... </load-on-statup>對Servlet進行預先初始化。
初始化失敗后,執行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可以在根據不同的配置參數連接不同的數據庫時創建多個實例。
感謝各位的閱讀!看完上述內容,你們對java中servlet的生命周期大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。