兩個init方法的區別

容器創建了Servlet實例後,它將調用實例的init(ServletConfig)方法初始化Servlet。該方法的參數ServletConfig對象包含了在Web應用程序的部署描述文件中指定的初始化參數。在init(ServletConfig)方法調用後,容器將調用無參數的init()方法,之後Servlet就被初始化了。重複初始化一個對象是沒有意義的,因此在Servlet生命週期中init()方法僅被調用一次。

    有時,可以在容器啓動時不對Servlet初始化,而是當容器接收到對該Servlet第一次請求時纔對它初始化,這稱爲延遲加載(Lazy Loading)。這種初始化的優點是可以大大提高容器的啓動時間。但缺點是,如果在Servlet初始化時要完成很多任務,如從數據庫中緩存靜態數據,則發送第一個請求的客戶等待時間會很長。在很多情況下,這是不可接受的。爲此,Servlet規範定義了<load-on-startup>元素,它可以在部署描述文件中指定當容器啓動時裝載並初始化Servlet。在請求達到之前裝載Servlet的過程稱爲預裝載或預初始化

    在Servlet實例正常初始化後,它就準備爲客戶提供服務。當容器接收到對該Servlet的請求時,都會創建一個新的線程,通過調用service(ServletRequest,ServletResponse)方法將請求分配給該Servlet實例。有多少個請求,服務器將創建多少個線程。service()方法將檢查HTTP請求的類型(GET、POST等)並調用相應的doGet()、doPost()等方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章