繁体   English   中英

在doget()方法中调用servlet的destroy方法

[英]calling destroy method of servlet inside doget() method

我想知道会发生什么,如果我在doget()方法中调用servlet的destroy()方法,请假设这是我在doget()方法本身中的第一个语句。请注意。

我已经在我的应用程序中尝试过,如下所示。

public class MyServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{

     destroy(); //calling destroy


String name=request.getParameter("txtName");
HttpSession ses=request.getSession();
ses.setAttribute("username",name);
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.println("<html><head><title>Cookie example</title></head><body>");
out.println("welcome,"+name);
out.println("<br><a href=ck>Take a Tour</a></body></html>");
out.close();
}
}

但是我的应用程序运行正常,但是仍然不清楚,请仍然向我解释一下逻辑。

请告知需要编写的代码片段是我想要覆盖destroy()的代码,以便在执行该代码时立即销毁Servlet。

当然,这完全取决于您的实现。 如果您没有重写它,那么它什么都不做,因为在HttpServlet中destroy的实现是空的。 结果,应用程序继续正常运行。

关于销毁方法的目的可能有些困惑。 目的不是servlet容器提供某种销毁servlet的方法

相反,它使您可以提供一些在容器调用destroy方法时将要执行的代码。 在某些情况下,当容器决定删除servlet时,需要清理资源(例如,关闭数据库连接)。 容器可以非常独立地删除servlet:例如,如果内存不足。 方法destroy将被称为移除的一部分。

如果您的目标是销毁Servlet实例,则destroy方法不是正确的工具。 再一次,调用destroy是删除servlet实例的一部分,而不是删除的原因。 正确的工具是从doGet抛出UnavailableException (这里不需要destroy方法)。 Javadoc中所述,无参数构造函数创建这样的实例,该实例指示servlet永久不可用。 进一步,这是容器的任务,如servlet规范中所述:

如果UnavailableException指示永久性不可用性,则servlet容器必须从服务中删除该servlet,调用其destroy方法,并释放该servlet实例。 容器由于该原因拒绝的任何请求都必须返回SC_NOT_FOUND(404)响应。

暂无
暂无

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

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