Servlet的生命周期

  Servlet的生命周期共有四个阶段:

  

  1.实例化

    实例化实例化阶段是Servlet生命周期中的第一步,由Servlet容器调用Servlet的构造器创建一个具体的Servlet对象的过程。而这个创建的时机可以是在容器收到针对这个组件的请求之后,即用了才创建;也可以在容器启动之后立刻创建实例,而不管此时Servlet是否使用的上;

 

  2.初始化

    Servlet在被加载实例化之后,必须要初始化它。在初始化阶段,init()方法会被调用。这个方法在javax.servlet.Servlet接口中定义;其中,方法以一个ServletConfig类型的对象作为参数。ServletConfig对象由Servlet引擎负责创建,从中可以读取到事先在web.xml文件中通过<init-param>节点配置的多个name-value名值对;ServletConfig对象还可以让Servlet接受一个ServletContext对象;一般情况下,init方法不需要编写,因GenericServlet类已经提供了init()方法的实现,并且提供了getServletConfig()法来获ServletConfig对象;

    注:init方法只被执行一次

  3.提供服务

    Servlet被初始化以后就处于能够响应请求的就绪状态每个对Servlet的请求由一个ServletRequest对象代表Servlet给客户端的响应由一个ServletResponse对象代表;当客户端有一个请求时,容器就会将请求与响应对象转给Servlet,以参数的形式传给service()方法service()方法由javax.servlet.Servlet定义,由具体的Servlet实现;

  4.销毁

    Servlet容器在销毁Servlet对象时会调用destroy()方法来释放资源。通常情况下Servlet容器停止或者重新启动都会引起销毁Servlet对象的动作,但除此之外,Servlet容器也有自身管理Servlet对象的准则,整个生命周期并不需要人为进行干预;

  

  例程如下:

@WebServlet("/LifeServlet")
public class LifeServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public LifeServlet() {
        super();
        System.out.println("1、完成了实例化");
    }

    @Override
    public void init() throws ServletException {
        super.init();
        System.out.println("2、完成了初始化");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
        System.out.println("3、就绪中");
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
        doGet(request, response);
    }

    @Override
    public void destroy() {
        super.destroy();
        System.out.println("4、销毁了");
    }
}

  

  当访问/LifeServlet这个接口时,打印如下:

1、完成了实例化
2、完成了初始化
3、就绪中

 

 当关闭服务器,打印:

4、销毁了

  

  

原文地址:https://www.cnblogs.com/coder-zyc/p/10617819.html