servlet遵循一定的生命周期,由servlet容器管理。生命周期包含以下过程:
- 加载Servlet类
- 创建Servlet实例
- 调用servlet
init()
方法 - 调用servlet
service()
方法 - 调用servlet
destroy()
方法
步骤1、2、3只在servlet初始加载时执行一次。默认情况下,servlet在没有收到请求时不会加载。但也可以在容器启动时强制加载servlet,后续内容会有说明。
步骤4会被多次执行 —— servlet每处理一个HTTP请求,都会执行一次service()
。
步骤5在servlet容器卸载servlet时执行。
servlet生命周期图:
加载Servlet类
在调用servlet前,servlet容器必须首先加载servlet的类定义,这和加载其他类是一样的。
创建Servlet实例
加载servlet类后,servlet容器将创建servlet的一个实例,通常并发请求会在同一个servlet实例上执行。但servlet容器可以决定是否创建多个实例,但一般只有一个实例。
调用servlet init()方法
创建servlet实例时,将调用其init()
方法初始化servlet。
可以在web.xml
文件中为servlet指定初始化参数,后续会有详细介绍。
调用servlet service()方法
对于收到的每个HTTP请求,容器都会调用servlet service()
方法处理请求。对于HttpServlet子类,通常调用doGet()
、doPost()
等方法。
只要servlet容器中的servlet是激活的(没有被destory),就可以调用service()
方法,生命周期中的这个步骤可以执行多次。
调用servlet destroy()方法
当servlet容器卸载servlet时,调用其destroy()
方法。这个步骤只执行一次,因为servlet只卸载一次。
当容器关闭,或者容器在运行时重新加载整个web应用程序,则由容器卸载servlet。