Servlet的生命週期是由servlet的容器來控制的。分為3個階段:初始化階段、執行階段、銷燬階段。
初始化階段:
初始化階段步驟:
Servlet容器載入servlet類,把它的. Class檔案中的資料讀到記憶體中。
Servlet容器建立servletConfig物件。servletConfig物件包含了servlet的初始化配置資訊。此外servlet容器還會使得servletConfig物件與當前的web應用的servletContext物件關聯。
Servlet容器建立servlet物件。
Servlet容器呼叫servlet物件的init(ServletConfig config)方法。
透過初始化步驟,建立了servlet物件和servletConfig物件,並且servlet物件與servletConfig物件關聯,而servletConfig物件又與當前物件的servletContext物件關聯。當servlet容器完成servlet後,servlet物件只要透過getServletContext()方法就能得到web應用的servletContext物件。
注:servlet初始化的情況:
(1) 當web應用處於執行階段時,特定的servlet被客戶端首次請求訪問。
(2) 在web.xml檔案中為servlet設定了<load-on-startup>元素
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>servlet.servlet1</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
說明:
在servlet的配置當中,<load-on-startup>5</load-on-startup>的含義是:
標記容器是否在啟動的時候就載入這個servlet。
當值為0或者大於0時,表示容器在應用啟動時就載入這個servlet;
當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才載入。
正數的值越小,啟動該servlet的優先順序越高。
(3) 當web應用被重新啟動時,web應用中的所有servlet會在特定的時間被重新初始化。
執行階段
在這個階段sevlet可以隨時響應客戶端的請求。當servlet容器接到訪問特定的servlet請求時,servlet容器會建立針對與這個請求的servletRequest和servletResponse物件,然後呼叫service()方法,並把這兩個物件當做引數傳遞給service()方法。Service()方法透過servletRequest物件獲得請求資訊,並處理該請求,再透過servletResponse物件生成響應結果。
【不管是post還是get方法提交,都會在service中處理,然後,由service來交由相應的doPost或doGet方法處理,如果你重寫了service方法,就不會再處理doPost或doGet了,如果重寫sevice()方法,可以自己轉向doPost()或doGet()方法】
注:當servlet容器把servlet生成的響應結果傳送給客戶後,servlet容器會銷燬servletRequest和sevletResponse物件。
銷燬階段
當Web應用被終止時,servlet容器會先呼叫web應用中所有的servlet物件的destroy()方法,然後在銷燬servlet物件。此外容器還會銷燬與servlet物件關聯的servletConfig物件。
在destroy()方法的實現中,可以釋放servlet所佔用的資源。如關閉檔案輸入輸出流,關閉與資料庫的連線。
Servlet的生命週期是由servlet的容器來控制的。分為3個階段:初始化階段、執行階段、銷燬階段。
初始化階段:
初始化階段步驟:
Servlet容器載入servlet類,把它的. Class檔案中的資料讀到記憶體中。
Servlet容器建立servletConfig物件。servletConfig物件包含了servlet的初始化配置資訊。此外servlet容器還會使得servletConfig物件與當前的web應用的servletContext物件關聯。
Servlet容器建立servlet物件。
Servlet容器呼叫servlet物件的init(ServletConfig config)方法。
透過初始化步驟,建立了servlet物件和servletConfig物件,並且servlet物件與servletConfig物件關聯,而servletConfig物件又與當前物件的servletContext物件關聯。當servlet容器完成servlet後,servlet物件只要透過getServletContext()方法就能得到web應用的servletContext物件。
注:servlet初始化的情況:
(1) 當web應用處於執行階段時,特定的servlet被客戶端首次請求訪問。
(2) 在web.xml檔案中為servlet設定了<load-on-startup>元素
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>servlet.servlet1</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
說明:
在servlet的配置當中,<load-on-startup>5</load-on-startup>的含義是:
標記容器是否在啟動的時候就載入這個servlet。
當值為0或者大於0時,表示容器在應用啟動時就載入這個servlet;
當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才載入。
正數的值越小,啟動該servlet的優先順序越高。
(3) 當web應用被重新啟動時,web應用中的所有servlet會在特定的時間被重新初始化。
執行階段
在這個階段sevlet可以隨時響應客戶端的請求。當servlet容器接到訪問特定的servlet請求時,servlet容器會建立針對與這個請求的servletRequest和servletResponse物件,然後呼叫service()方法,並把這兩個物件當做引數傳遞給service()方法。Service()方法透過servletRequest物件獲得請求資訊,並處理該請求,再透過servletResponse物件生成響應結果。
【不管是post還是get方法提交,都會在service中處理,然後,由service來交由相應的doPost或doGet方法處理,如果你重寫了service方法,就不會再處理doPost或doGet了,如果重寫sevice()方法,可以自己轉向doPost()或doGet()方法】
注:當servlet容器把servlet生成的響應結果傳送給客戶後,servlet容器會銷燬servletRequest和sevletResponse物件。
銷燬階段
當Web應用被終止時,servlet容器會先呼叫web應用中所有的servlet物件的destroy()方法,然後在銷燬servlet物件。此外容器還會銷燬與servlet物件關聯的servletConfig物件。
在destroy()方法的實現中,可以釋放servlet所佔用的資源。如關閉檔案輸入輸出流,關閉與資料庫的連線。