天天看點

Servlet的生命周期Servlet的生命周期

Servlet生命周期

  • Servlet的生命周期
    • 簡介
    • 具體步驟
    • 注意事項

Servlet的生命周期

簡介

Servlet的生命周期是由容器管理的,分别經曆四個階段:

階段 次數 時機
建立 1次 第一次請求時,new
初始化 1次 Servlet執行個體化之後,init()
執行服務 多次 每次請求,service()
銷毀 1次 停止服務,destroy()

具體步驟

  • 1、加載

    在下列時刻會加載Servlet(隻執行一次):

    • 如果已經配置自動加載選項,則在啟動伺服器時自動加載web.xml檔案中設定的

      <load-on-start>

    • 伺服器啟動之後,客戶機首次向Servlet送出請求時會加載;
    • 重新加載Servlet時會進行一次加載;
  • 2、執行個體化

    加載Servlet後,伺服器建立一個Servlet執行個體。(隻執行一次);

  • 3、初始化

    調用Servlet的

    init()

    方法。在初始化階段,Servlet初始化參數被傳遞給Servlet配置對象ServletConfig,(隻執行一次);
  • 4、請求處理

    對于到達伺服器的客戶機請求,伺服器建立針對此次請求的一個"請求"對象和一個"響應對象"。

    伺服器調用Servlet的

    service()

    方法,該方法用于傳遞"請求"和"響應"對象。

    service()

    方法從"請求"對象獲得請求資訊、處理該請求并用"響應"對象的方法将響應回傳給用戶端。

    service()

    方法可以調用其他方法來處理請求,例如

    doGet()、doPost()

    或其他方法。

    每次請求都會執行該步驟;

  • 5、銷毀

    當伺服器不需要Servlet,或重新裝入Servlet的新執行個體時,伺服器會調用Servlet的

    destroy()

    方法。(隻執行一次);

注意事項

  • 如果需要Servlet在服務啟動時就執行個體化并初始化,我們可以在servlet的配置中添加load-on-startup配置啟動順序,配置的數字為啟動順序,應避免沖突且應>6;
  • 在Servlet中我們一般不要輕易使用成員變量,容易造成給線程安全問題;
  • 如果要使用成員變量的話,應當盡量避免對成員變量産生修改;
  • 如果産生修改應該注意線程安全問題;
  • 自己添加線程安全編碼處理,會嚴重影響效率;

    原則,能不用成員變量就不要用!

持續更新,如果錯誤,歡迎大家指出,共同學習...