在ServletContextListener中处理Javaexception的首选方法

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

例如,

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); } } 

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

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

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

似乎ServletContentListener不能设计为能够对生命周期进行控制(否则将允许抛出ServletException)。

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

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

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

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