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()方法。