在ServletContextListener中处理Java异常的首选方法

时间:2010-10-27 08:36:39

标签: java servlets java-ee

对于servlet生命周期的东西,你们建议做什么来回应异常......

例如,

public class Foo implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        try {
           // something nasty
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        try {
           // something nasty
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

我不完全确定将处理上述运行时异常的内容。我的想法是,如果在这里抛出异常,它们就足以严重破坏系统,因此(未处理的)运行时异常可能可以。

我想我在问什么处理来自servlet上下文侦听器的未经检查的异常?

4 个答案:

答案 0 :(得分:10)

当您捕获异常时,您可能需要考虑设置ServletContext属性以指示已遇到错误。这样,如果容器未禁用该应用,您可以让Filter和/或Servlet检查ServletContext属性并采取适当的操作,例如显示错误页面。< / p>

答案 1 :(得分:6)

似乎ServletContentListener并不是为了能够对生命周期进行控制(否则会抛出ServletException)。

因此,我不会依赖RuntimeException来做任何有用的事情。查看some other threads here,它似乎在某些应用程序服务器上被记录并被忽略。

如果在代码失败时应用程序无法启动至关重要,则应将该代码移动到Servlet的初始化部分。

答案 2 :(得分:0)

显示“技术错误,抱歉”这样的页面并且不显示带有错误消息的堆栈跟踪是很好的基调。只需记录它并将用户转发到错误页面。

答案 3 :(得分:-2)

我们可以通过object.printStackTrace(); 或者通过out.print调用Exception(“Exception is”+ ex);