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

时间:2012-07-16 17:44:21

标签: java java-ee tomcat servlets

我想知道会发生什么,如果我在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会立即被销毁

1 个答案:

答案 0 :(得分:4)

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

对于破坏方法的目的可能存在一些混淆。 目的不是servlet容器提供了一些破坏servlet的方法

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

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

  

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