以下內容摘自<<精通 servlet>>Servlet基礎Servlet容器(以前稱Servelt引擎)實際上是執行servlet的軟件。所有支持servlet的服務器包括一個servelt容器(集成的或通過插件。)術語支持java的服務器常指一個增強的servletHTTP服務器(即它包括一個用于運行servlet的 servlet容器) Servlet生命周期:以下是一個服務器調用servlet的過程。
1,在服務器啟動時,當servlet被客戶首次請求或被配置好,這時由服務器加載servlet.Servlet的加載可以通過合用一個自定義的Java類加載工具(可允許自動Servlet重載)從本地或遠程地址來實現。這一步等同于 Class c = Class.forName(“com.sourceStream.MyServlet”);這里用的術語加載指同時加載和初始化servlet的過程。
2.服務器創建一個servlet類實例來為所有請求服務。利用多線程,可以由單個servlet實例來服務于并行的請求。惟一的例外是,因為實現SingleThreadModel接口的servlet,這樣,服務器會創建一個實例池并從中選擇一個來服務于每一新的請求。此步相當于以下java代碼:Servlet s = (Servlet)c.newInstance();
3. 服務器調用Servlet的init()方法。它用來保證完成在首次請求servlet處理以前的執行過程。如果servlet創建了多個servlet實例,則為每個實例調用一次init()方法。
4.服務器從包括在客戶請求中的數據里構造一個ServletRequest或HttpServletRequest對象,還構造一個ServletResponse或HttpServletResponse對象來返回響應提供方法。其參數類型依賴于servlet是否分別擴展GenericServlet或HttpServlet.(注意:如果服務器沒有收到對這一servlet的請求,此步驟與以下5---7步驟將不會發生。)
5.服務器調用servlet的service()方法(對于Httpservlet,service()將調用更為具體的方法:如:doGet()或doPost()),在此步驟中作為參數傳遞結構化對象。當并行的請求到來時,多個service()方法能夠同時運行在獨立的線程中。(除非servlet實現了SingleThreadModel接口)
6通過分析ServletReuest或HttpServletRequest對象。Service()方法處理客戶的請求.并調用ServletResponse或HttpServletResponse對象來響應。 7.如果服務器收到另一格對該servlet的請求,這個處理過程從5步驟重復。 8.一旦servlet容器檢測到一個servlet要被卸載,這可能是因為要回收資源或因為它正在被關閉,服務器會在所有servlet的service()線程完成之后(或在服務器規定時間后)調用servlet的destroy()方法。然后servlet就可以進行無用存儲單元收集清理。Servlet容器不需要為保留一個servlet而指定時間。以上8個步驟就是servlet的生命周期。(