當客戶端的請求到達Tomcat,Tomcat會創建一個線程來接收、處理、響應客戶端請求,客戶端在請求某個Servlet類時,線程需要通過這個Servlet類的實例來調用service方法、調用doGet/doPost..方法來處理響應請求,這個Servlet類的實例是何時創建、何時銷毀的呢?
Servlet實例的生命周期指的是一個Servlet類的實例從創建到銷毀的過程。
Servlet類是單實例多線程的,一個Servlet類自始至終只會創建一個對象;
如果當前Servlet類沒有配置
當客戶端第一次請求Servlet時,創建當前Servlet類的實例,然后使用這個實例調用service(ServletRequest, ServletResponse)方法——service(HttpServletRequest, HttpServletResponse)方法——doGet/doPost處理客戶端請求;當客戶端請求再次到達時將不會重新創建Servlet實例,直接使用第一次創建的實例調用方法進行響應;
如果當前Servlet類配置了
當服務器啟動時就會創建Servlet類的實例,無論客戶端第一次請求這個Servlet類,還是再次請求都不會創建Servlet類實例,直接使用服務器啟動時創建的Servlet實例來接收、處理、響應客戶端請求;
當服務器關閉時,Serlvet類的實例會被銷毀。
配置load-on-startup的兩種方式:
xml配置
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.qfedu.servlets.TestServlet</servlet-class>
<!--如果有多個Servlet都配置了load-on-startup,里面的數字就是在服務器中創建實例的順序-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
注解配置