Java Servlet的生命周期及其方法

Java Servlet的生命周期及其方法,java,servlets,lifecycle,Java,Servlets,Lifecycle,我知道servlet由init、service和destroy方法组成。我还知道有可用的doPost和doGet方法。问题是service方法与doPost和doGet方法的关系。在识别请求后,是否从服务方法中调用它们?在实施do方法时是否省略服务?我需要澄清一下 例如,在一个接收单个POST请求的Servlet的生命周期中,我会猜其顺序是: 执行init() 当init()完成时,调用service() service()识别请求并调用doPost()方法 当doPost()和service

我知道servlet由
init
service
destroy
方法组成。我还知道有可用的
doPost
doGet
方法。问题是
service
方法与
doPost
doGet
方法的关系。在识别
请求
后,是否从
服务
方法中调用它们?在实施
do
方法时是否省略
服务
?我需要澄清一下

例如,在一个接收单个
POST
请求的
Servlet
的生命周期中,我会猜其顺序是:

  • 执行
    init()
  • init()
    完成时,调用
    service()
  • service()
    识别
    请求
    并调用
    doPost()
    方法
  • doPost()
    service()
    完成时,执行
    destroy()
    方法
那是对的吗?

不,不对

init()
destroy()
只调用一次。servlet由容器实例化,并调用其
init()
方法。这通常发生在启动时,或者当servlet的第一个请求出现时

然后,所有的请求都由
service()
方法处理,该方法根据请求类型()调用相应的
doXxx()
方法

然后,当应用程序取消部署(或服务器停止)时,调用
destroy()
方法


javadoc是你的朋友。读一下。它包含对您的问题的所有答案。这些规范也可以免费获得。

从文档中可以看出,
服务负责根据名为(POST,GET…)的HTTP方法,向相关的servlet方法进行调度

从公共服务方法接收标准HTTP请求,并 将它们分派给此类中定义的doXXX方法。这 方法是的HTTP特定版本 service(javax.Servlet.ServletRequest, servlet.ServletResponse)方法。没有必要重写 这个方法

这是基本流程, -servlet是通过调用init()方法初始化的

  • servlet调用service()方法来处理客户机的请求
  • 服务方法根据请求调用doGet或doPost 如果get请求来自doGet,则类型来自客户端 调用post请求doPost

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

  • 最后,servlet由服务器的垃圾收集器进行垃圾收集 JVM

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

每次服务器收到servlet请求时,服务器都会生成一个新线程并调用服务。service()方法检查HTTP请求类型(GET、POST、PUT、DELETE等),并根据需要调用doGet、doPost、doPut、doDelete等方法

Servlet生命周期