Servlet生命周期
Servlet遵循一定的生命周期。 Servlet生命周期由Servlet容器管理。生命周期包含以下步骤:
- 加载Servlet类。
- 创建Servlet实例。
- 调用servlet的init()方法。
- 调用servlet的service()方法。
- 调用servlet的destroy()方法。
最初加载servlet时,步骤1、2和3仅执行一次。默认不加载的servlet,直到接收到它的第一个请求。不过,我们可以在容器启动时强制容器加载servlet。见web.xml中Servlet的配置有关的更多细节。
对于向Servlet发出的每个HTTP请求,步骤4将执行多次。当servlet容器卸载servlet时,执行步骤5.
加载Servlet类
在可以调用servlet之前,servlet容器必须首先加载其类定义。就像加载任何其他类一样完成此操作。
创建Servlet实例
加载servlet类时,servlet容器将创建servlet的实例。
通常,仅创建一个单一的servlet实例,并在同一servlet实例上执行对servlet的并发请求。不过,这实际上取决于servlet容器。但通常只有一个实例。
调用Servlets init()方法
创建一个servlet实例时,将调用它的init()
方法。 init()方法允许Servlet在处理第一个请求之前对其进行初始化。
我们可以在web.xml文件中为servlet指定初始化参数。有关更多详细信息,请参见web.xml Servlet配置。
调用Servlets service()方法
对于每个接收到的servlet的请求,都会调用servlet的service()方法。对于HttpServlet子类,通常调用doGet(),doPost()等方法之一。
只要Servlet在Servlet容器中处于活动状态,就可以调用service()
方法。因此,生命周期中的此步骤可以多次执行。
调用Servlet destroy()方法
当一个servlet容器卸载一个servlet时,它的destroy()
方法被调用。该步骤仅执行一次,因为servlet仅卸载一次。
如果容器关闭,或者容器在运行时重新加载了整个Web应用程序,则该容器将卸载Servlet。