Servlet的生命周期及其方法

Posted

技术标签:

【中文标题】Servlet的生命周期及其方法【英文标题】:Life cycle of Servlet and its methods 【发布时间】: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() 方法被执行

对吗?

【问题讨论】:

【参考方案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 生命周期

【讨论】:

以上是关于Servlet的生命周期及其方法的主要内容,如果未能解决你的问题,请参考以下文章

tomcatservlet原理及其生命周期

servlet配置及其生命周期

servlet简介及其生命周期

servlet的生命周期,啥情况下调用doGet()和doPost()?

Servlet 生命周期

Servlet编程:Servlet的生命周期