我知道Servlet由init
,service
和destroy
方法组成。我也知道有doPost
和doGet
方法可用。问题是service
方法与doPost
和doGet
方法的关系。在service
被识别后,是否在request
方法中调用它们?实施service
方法时是否省略do
?我需要一些澄清。
例如,在收到单个Servlet
请求的POST
生命周期中,我猜测订单会是:
init()
init()
完成后,service()
被称为service()
标识request
并调用doPost()
方法doPost()
和service()
完成destroy()
方法时这是对的吗?
答案 0 :(得分:2)
不,这不对。
init()
和destroy()
仅被调用一次。 servlet由容器实例化,并调用其init()
方法。这通常发生在启动时,或者第一次发出servlet请求时。
然后所有请求由service()
方法处理,该方法根据请求类型(as documented)调用相应的doXxx()
方法。
然后,当取消部署应用程序(或服务器停止)时,将调用destroy()
方法。
javadoc是你的朋友。阅读。它包含您问题的所有答案。规格也是免费提供的。
答案 1 :(得分:2)
这是基本流程, - 通过调用init()方法初始化servlet。
服务方法根据请求调用doGet或doPost 类型来自客户端如果获取请求,则调用doGet,如果 发布请求doPost
通过调用destroy()方法终止servlet。
最后,servlet被垃圾收集器垃圾收集 JVM。
service()方法是执行实际任务的主要方法。 servlet容器(即web服务器)调用service()方法来处理来自客户端(浏览器)的请求,并将格式化的响应写回客户端。
每次服务器收到servlet请求时,服务器都会产生一个新线程并调用服务。 service()方法检查HTTP请求类型(GET,POST,PUT,DELETE等),并根据需要调用doGet,doPost,doPut,doDelete等方法。
答案 2 :(得分:1)
从文档中,service
负责根据调用的 HTTP 方法调派相关的servlet方法( POST , GET < / EM> ...)
从公共服务方法接收标准HTTP请求 将它们分派给此类中定义的doXXX方法。这个 method是HTTP特定的版本 Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)方法。没有必要覆盖 这种方法。