Servlet运行在容器中,没有main方法,所以生命周期由容器控制。简单地说,Servlet的生命周期只有两个状态:未创建状态和初始化状态,通过3个方法来控制:init()、service()和destroy()。其中,init()方法是Servlet生命的起点,用于占有与Servlet相关的资源以及完成初始化工作;service()方法根据HTTP请求方法(get、post等)将请求分发给doGet()和doPost()等方法;destroy()方法释放在init()方法中占有的与Servlet实例相关的资源。
Servlet的状态图如下:
具体而言,Servlet的生命周期分为加载、创建、初始化、处理请求和卸载5个阶段。
1. 加载
容器通过类加载器使用Servlet类对应的文件来加载Servlet。
2. 创建
调用Servlet的构造方法来创建一个Servlet实例。
3. 初始化
调用Servlet实例的init()方法完成初始化工作,在处理请求前被调用且只会被调用一次。
4. 处理请求
每当有新的请求到达时,容器会创建一个新的线程来处理该请求,调用Servlet实例的service()方法响应请求。其中,service()方法根据请求的method属性值的不同调用doGet()方法或者doPost()方法。
5. 卸载
容器在卸载Servlet实例之前会调用destroy()方法,释放Servlet实例占有的资源,该方法只会被调用一次。
参考资料
《Java程序员面试笔试宝典》 P168-169