当前位置:首页 » Servlets » Servlet生命周期

Servlet生命周期

Servlets生命周期在线教程,实例代码 - 可以定义一个servlet的生命周期,从创建,直到毁灭的全过程。

可以定义一个servlet的生命周期,从创建,直到毁灭的全过程。以下是通过servlet遵循的过程:

  • servlet通过调用init () 方法进行初始化。

  • servlet调用service()方法来处理客户端的请求。

  • 该servlet通过调用destroy()方法终止(结束)。

  • 最后,servlet是由垃圾收集器的JVM的垃圾收集。

现在让我们讨论生命周期方法的细节。

init() 方法:

init方法被设计成只被调用一次。这是第一次被创建时调用这个servlet,而不是再次调用每个用户请求。因此,它是用于一次性初始化,一样的Applet的init方法。

当用户创建该servlet通常首先调用相应的servlet的URL,但您也可以指定这个servlet的服务器第一次启动时被加载。

当用户调用一个servlet,每个servlet的单个实例被创建,每一个用户请求产生一个新的线程,被移交给doGet,doPost方法。简单的init()方法创建或加载一些数据将被用于整个生命周期的servlet。

init方法定义看起来像这样:

public void init() throws ServletException {
  // Initialization code...
}

service() 方法:

service()方法是主要的方法来执行实际的任务。 servlet容器(如Web服务器)调用service()方法来处理来自客户端(浏览器)的请求,并写格式化响应返回给客户端。

每次服务器接收到一个servlet请求时,服务器产生一个新的线程并调用服务。 service()方法检查HTTP请求类型(GET,POST,PUT,DELETE等),并调用doGet,doPost方法,doPut,doDelete,等适当的方法。

下面是这种方法的签名:

public void service(ServletRequest request, 
                    ServletResponse response) 
      throws ServletException, IOException{
}

由容器和服务方法service()方法被调用时调用doGet,doPost方法,doPut,doDelete等适当的方法。所以,service()方法什么都不用做,但你只需要重写doGet()或doPost()方法,但取决于你是什么类型的请求从客户端接收。

doGet()和doPost()方法是最常用的方法,在每一个服务请求。下面是这两种方式中的签名。

doGet() 方法

从一个正常的请求的URL或HTML的形式,有没有指定的方法,它应该被处理的doGet()方法的GET请求的结果。

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet code
}

doPost() 方法

从一个HTML表单,具体列出POST的方法和doPost()方法,应当由POST请求的结果。

public void doPost(HttpServletRequest request,
                   HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet code
}

destroy() 方法:

一个servlet的生命周期结束时,destroy()方法只会被调用一次。这种方法可以让你的servlet关闭数据库连接,停止后台线程,写入Cookie列表,或打计数到磁盘,并执行其他类似的清理活动的机会。

Servlet对象的destroy()方法被调用后,被标记为垃圾回收。 destroy方法定义看起来像这样:

  public void destroy() {
    // Finalization code...
  }

架构图:

下图显示了一个典型的servlet的生命周期的情况。

  • 第一个到服务器的HTTP请求被委派到servlet容器。

  • servlet容器装载,然后再调用这个servlet的service()方法。

  • 然后servlet容器产生多个线程,每个线程执行一个单一的servlet实例的service()方法的处理多个请求。