Servlet的生命周期
Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示,包含了下面4个阶段:
1.实例化:
当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。
当Servlet容器启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建Servlet的实例。
因为容器是通过Java的反射API来创建Servlet实例,调用的是Servlet的默认构造方法,所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。
执行当前Servlet的构造方法,完成当前Servlet实例的创建
public LifeServlet() {
System.out.println("1.LifeServlet实例被创建!");
}
2.初始化:
在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。
对于每一个Servlet实例,init()方法只被调用一次。
执行当前Servlet实例的init()初始化方法(重写父类)
@Override
public void init() throws ServletException {
System.out.println("2.LifeServlet实例完成初始化!");
}
3.服务:
Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在service()方法调用之前,init()方法必须成功执行。在service()方法中,service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
调用父类HttpServlet的service()方法
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("3.LifeServlet实例调用服务");
}
4.销毁:
当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例
@Override
public void destroy() {
System.out.println("4.LifeServlet实例被销毁");
}