Servlet 的生命周期與線程安全


一、servlet的生命周期

    1. servlet 有種初始化情形:

        a.在servlet容器啟動時初始化。在web.xml <servlet> 中配置<load-on-startup>1</load-on-startup>表示在容器啟動時初始化。默認沒有此置,  

     表示另一種情形。

         b.servlet在第一次被訪問時初始化。即創建唯一的servlet實例。(單例多線程下面會說)

       

        初始化包括4個步驟:

         servlet容器價值servlet類,把它的.class文件讀入內存 

          servlet容器創建ServletConfig對象。servletConfig對象包含特定的初始化配置信息,如servlet初始化參數,servlet還會是servletConfig與當 前                應用的ServletContext對象關聯。    

           servlet容器創建servlet對象

          容器調用servlet對象的init(servletConfig config)方法,servlet創建完成。

 

 

 

     2. 當有請求訪問該servlet是,servlet容器就會創建針對於這個請求的servletRequest於servletResponse,然后servlet的service方法被調用。當容器把servlet生成的響應結果發送給客戶,容器就會銷毀request和response對象。

     3. 容器在銷毀該實例前調用servlet的destroy方法(釋放servlet所占用的資源,如關閉流和數據庫連接),此外還會銷毀與servlet對象關聯的ServletConfig對象。

 

二、 servlet的線程安全

    1. servlet類只創建一個實例,對於可與客戶端的並發訪問,它是線程不安全的。

    2. servlet的處理方式是,每次訪問時重新起一線程執行service方法。所以要想保證servlet的線程安全,不應該在servlet中定義實例變量。

    3. 當然完全可以通過加鎖保證線程安全,但對於成千上萬的並發訪問,性能下降。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM