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