这是我前几天面临的面试问题之一:
是否可以从 调用该service()
方法destroy()
?
提前致谢。
destroy()
是Servlet 容器在卸载特定 Servlet 实例时调用的生命周期方法。同样,当有客户端请求 Servlet 时,容器将调用。service()
我们可以从Servlet 中的方法调用
service()
方法吗?destroy()
简短的回答: 是的,service()
就像任何其他方法一样。
长答案:你可以,但这没有意义。service()
需要一个请求和一个响应参数,这些参数通常由容器在调用 Servlet 时提供。如果您service()
自己调用,您将如何提供这些参数?做什么的?你要null
两个都用吗?service()
两个空参数有什么用?
我们可以 从Servlet 中的方法调用
destroy()
方法 吗?service()
是的,同样,您可以destroy()
从内部调用,service()
因为它也是一种与任何其他方法一样的方法。尽管仍然很奇怪,但有时这可能是有意义的,就像destroy()
您定义的任何逻辑(清理、删除属性等)一样。
重要提示:请记住,简单地调用destroy()
不会卸载Servlet 实例。您无需在程序中管理 Servlet 的生命周期,而 Servlet 容器负责。
的目的destroy()
是取消分配/释放 Servlet 实例使用的所有资源。通过调用destroy()
容器注销 servlet 及其服务。
是的,您可以调用任何service(request, response)
类似的方法,destroy()
但它不会被执行,因此调用服务方法是没有用的,destroy()
因为这些服务方法永远不会被调用/执行,请求和响应将为空,因为容器不会提供这些对象。
public void destroy() {
try
{
doPost(null, null); // will not be executed
doGet(null, null); // will not be executed
}
catch(Exception e)
{
e.printStackTrace();
}
}
来自Java 文档:
公共无效销毁()
由 servlet 容器调用以向 servlet 指示 servlet 正在停止服务。只有在 servlet 的服务方法中的所有线程都退出或经过超时时间之后,才会调用此方法。
servlet容器调用该方法后,不会再在该servlet上调用service方法。
此方法使 servlet 有机会清理任何被占用的资源(例如,内存、文件句柄、线程),并确保任何持久状态与 servlet 在内存中的当前状态同步。