【问题标题】:Life cycle of Servlet and its methodsServlet的生命周期及其方法
【发布时间】:2016-01-01 12:51:56
【问题描述】:

我知道 Servlet 由 initservicedestroy 方法组成。我也知道有可用的doPostdoGet 方法。问题是service 方法与doPostdoGet 方法的关系如何。在识别request 之后,它们是从service 方法中调用的吗?实现do 方法时是否省略了service?我需要在这里澄清一下。

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

  • init() 被执行
  • init() 完成时,service() 被调用
  • service() 识别request 并调用doPost() 方法
  • doPost()service() 都完成时,destroy() 方法被执行

对吗?

【问题讨论】:

    标签: java servlets lifecycle


    【解决方案1】:

    不,这是不对的。

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

    然后所有请求由service()方法处理,该方法根据请求类型(as documented)调用适当的doXxx()方法。

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

    javadoc 是你的朋友。阅读。它包含您问题的所有答案。规格也可免费获得。

    【讨论】:

      【解决方案2】:

      从文档来看,service 负责调度到相关的 servlet 方法,基于调用的 HTTP 方法 (POST, GET...)

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

      HTTPServlet.service

      【讨论】:

        【解决方案3】:

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

        • servlet 调用 service() 方法来处理客户端的请求。
        • 服务方法根据请求调用doGet或doPost type 来自客户端如果 get 请求来了 doGet 被调用 if 发布请求 doPost 被调用

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

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

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

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

        Servlet 生命周期

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-07
          • 1970-01-01
          • 2014-12-01
          • 2013-02-06
          • 1970-01-01
          • 2012-05-19
          • 1970-01-01
          • 2011-04-16
          相关资源
          最近更新 更多