繁体   English   中英

我们可以从Servlet中的destroy()方法调用service()方法吗?

[英]Can we call service() method from destroy() method in Servlet?

这是我几天前遇到的面试问题之一:

是否可以从destroy()调用service()方法?

提前致谢。

destroy()是在卸载Servlet的特定实例时由Servlet容器调用的生命周期方法。 类似地,当客户端请求Servlet时, 容器将调用service()

我们可以从Servlet中的destroy()方法调用service()方法吗?

简短回答: 是的 ,因为service()是一种与其他方法一样的方法。

答案很长:你可以,但没有意义。 service()需要一个请求和响应参数,这些参数通常在调用Servlet时由容器提供。 如果您自己致电service() ,您将如何提供这些参数? 做什么的? 你们两个都会使用null吗? 两个空参数的service()有什么用?

我们可以从Servlet中的service()方法调用destroy()方法吗?

是的 ,再次,你可以从service()调用destroy() ,因为它也是一个像任何其他方法一样的方法。 虽然仍然很奇怪,但这有时会有意义,因为destroy()将执行您定义的任何逻辑(清理,删除属性等)。


重要提示:请记住,简单地调用destroy()不会卸载 Servlet实例。 您没有在Servlet容器中管理程序中Servlet的生命周期。

destroy()目的是destroy()分配/释放Servlet实例使用的所有资源。 通过调用destroy()容器注销servlet及其服务。

是的,您可以destroy() anyohter方法一样调用 service(request, response)但是它不会被执行因此从destroy()调用服务方法是无用的,因为那些服务方法永远不会被调用/执行,请求和响应将会为null,因为容器不会提供这些对象。

public void destroy() {
      try
      { 
          doPost(null, null); // will not be executed 
          doGet(null, null); // will not be executed 
      }
      catch(Exception e)
      {
          e.printStackTrace();
      }
    }

来自Java doc

public void destroy()

由servlet容器调用,以向servlet指示servlet正在停止服务。 只有在servlet的服务方法中的所有线程都已退出或超时期限过后,才会调用此方法。

在servlet容器调用此方法之后,它不会再在此servlet上调用服务方法。

此方法使servlet有机会清除所有正在保留的资源(例如,内存,文件句柄,线程),并确保任何持久状态与servlet在内存中的当前状态同步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM