目录

Servlets - 生命周期( Life Cycle)

servlet生命周期可以定义为从创建到销毁的整个过程。 以下是servlet遵循的路径。

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

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

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

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

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

The init() Method

init方法只调用一次。 只有在创建servlet时才会调用它,之后不会调用任何用户请求。 因此,它用于一次性初始化,就像applet的init方法一样。

servlet通常在用户首次调用与servlet对应的URL时创建,但您也可以指定在首次启动服务器时加载servlet。

当用户调用servlet时,会创建每个servlet的单个实例,每个用户请求都会生成一个新线程,该线程将根据需要传递给doGet或doPost。 init()方法只是创建或加载一些将在servlet的整个生命周期中使用的数据。

init方法定义如下所示 -

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

The service() Method

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()方法由容器调用,service方法根据需要调用doGet,doPost,doPut,doDelete等方法。 因此,您与service()方法无关,但您可以覆盖doGet()或doPost(),具体取决于您从客户端收到的请求类型。

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

The doGet() Method

GET请求来自对URL的正常请求或来自未指定METHOD的HTML表单,并且应由doGet()方法处理。

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

The doPost() Method

POST请求来自HTML表单,该表单专门将POST列为METHOD,它应该由doPost()方法处理。

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

The destroy() Method

destroy()方法仅在servlet生命周期结束时调用一次。 此方法使您的servlet有机会关闭数据库连接,暂停后台线程,写入cookie列表或命中磁盘计数,以及执行其他此类清理活动。

调用destroy()方法后,servlet对象被标记为垃圾回收。 destroy方法定义如下所示 -

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

建筑图

下图描绘了典型的servlet生命周期场景。

  • 首先,将发送到服务器的HTTP请求委托给servlet容器。

  • servlet容器在调用service()方法之前加载servlet。

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

Servlet生命周期
↑回到顶部↑
WIKI教程 @2018