如何在创建之前销毁servlet?

时间:2013-03-21 17:37:44

标签: java servlets

我在面试中被问到一个问题,你如何阻止Servlet实例化一个servlet对象?
我说容器决定销毁servlet对象。

他再次说容器将首先创建servlet对象然后销毁它。我的问题是还没有创建servlet对象,所以没有必要销毁它。当你试图在严重问题中实例化陷阱时,你将如何编写servlet类?我们的代码(或任何其他方式)应该阻止它实例化?

3 个答案:

答案 0 :(得分:1)

我猜他希望你从javax.servlet.UnavailableException

投掷init()
  

public class UnavailableException   扩展ServletException   此异常表示servlet不可用。 Servlet可以随时报告此异常,并且运行servlet的网络服务应该正常运行。有两种类型的不可用性,而复杂的服务将以不同的方式处理这些:   

永久不可用。在采取某些管理操作来纠正servlet问题之前,servlet将无法处理客户端请求。例如,servlet可能配置错误,或者servlet的状态可能已损坏。编写良好的servlet将记录错误和管理员必须执行的纠正操作,以使servlet可用。    

暂时不可用。由于系统范围的问题,servlet目前无法处理请求。例如,可能无法访问第三层服务器,或者可能没有足够的内存或磁盘存储来处理请求。问题可能是自我纠正,例如由于负载过重导致的问题,或者管理员可能需要采取纠正措施。

答案 1 :(得分:1)

您可以通过三种方式阻止容器创建Servlet实例:

  1. 在web.xml中删除对Servlet的引用。如果您的容器正在处理注释,则还需要删除@WebServlet注释。

  2. 在构造函数中,抛出异常。

  3. 在init()方法中,抛出异常。

答案 2 :(得分:0)

你说得对,容器负责servlet的创建和生命周期。它首先使用默认的公共构造函数创建servlet的实例,然后调用其init()方法。当容器想要销毁servlet时,它调用它的destroy()方法,通常是(恕我直言)为空。

当部署可能是您的应用程序的新版本时,容器可以在热重新部署期间首先销毁然后创建新的servlet。这可能是你的面试官想要听到的。