2009-12-21 64 views
3

当我的Web应用程序中发生错误或异常时,我想收到一封电子邮件,以便我可以快速完成修复。我设置了一个JSP错误页面。我喜欢向客户显示错误页面,并同时收到一封电子邮件。我为每个jsp使用jsp和相应的servlet和控制器。发送例外或错误的电子邮件

如何在发生错误或异常时调用servlet发送电子邮件? web.xml中的配置如何?

请帮助。

回答

0

您可以使用Java Mail API,javadoc herehere是开发人员指南。

+0

web.xml配置如何?当发生一个异常或错误时,如何重定向到我的Exceptionservlet? – coder247 2009-12-21 09:18:44

0

我可能是错的,但从您的问题看来,您认为它是配置的问题,或者向web.xml添加一些参数。实际上它更复杂些,因为Java EE比这更“低级”。

您需要编写一些使用JavaMail API发送电子邮件的代码。 (Here是一个源码示例。)该代码必须放入异常/错误处理程序中。

这是一个好主意,可以配置此功能,以便您可以在应用程序的不同部分打开或关闭它。

不论出于何种原因,仔细想想发送邮件失败时会发生什么情况也是一个好主意。

而且,当然,您将需要一个现有的邮件服务器与现有的邮件帐户。

+0

雅...我正在寻找web.xml配置。我喜欢在出现错误时自动调用我的servlet。并且有任何想法,我如何在servlet中获取异常,以便我可以通过电子邮件发送详细信息? – coder247 2009-12-21 09:27:56

5

您可以编写自己的解决方案,也可以在标准日志包中使用电子邮件选项。例如,log4j具有SMTPAppender,它将执行您所需的操作。

0

我建议您使用现有的监视解决方案,如log4j(@Ben),nagios或其中一种商业支持的开源产品。

如果你滚你自己的解决方案,注意类似的问题:

  • 大量的误报给您发送监控垃圾邮件

  • 监控垃圾邮件导致你错过真正的报警

  • 由于电子邮件中断而丢失报警

  • 由于系统已经过时,弛缓性的而不是抛出异常

0

log4j的解决方案是特别好,因为你可以配置它也​​发送previsous日志行,所以你必须对异常是如何发生的

0

你在使用Spring吗?如果是,那么只要发生错误,您就可以使用异常解析器重定向到特定的控制器。如果发生JSP错误,您可以配置en错误页面发送邮件。

5

这不仅取决于您已经使用的API和/或框架(例如log4j),还取决于您如何处理全局异常。如果你只是在web.xml中定义了error-page,那么例如上述的log4j肯定不会看到/处理它。你需要自己捕捉并记录它

可以使用Filter监听的/*url-pattern此:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
    try { 
     chain.doFilter(request, response); 
    } catch (Exception e) { 
     logger.error(e); // Let "error" level associate with SMTPAppender. 
     throw new ServletException(e); // Will be handled by error-page. 
    } 
} 

或者如果您有一个控制器servlet之一:

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    View view = new View(request, response); 
    Action action = ActionFactory.getAction(request); 
    try { 
     action.execute(view); 
    } catch (Exception e) { 
     logger.error(e); // Let "error" level associate with SMTPAppender. 
     throw new ServletException(e); // Will be handled by error-page. 
    } 
    view.navigate(); 
} 

作为短但语义讨厌的替代你也可以在JSP中使用scriptletsexception在JSP中作为隐式变量可用。将其记录在错误页面中,并让记录器处理邮件内容。例如。

<% logger.error(exception); %> 
+0

我试图实现这一个,但我没有得到它。什么意思视图类?我如何能够实现这一点?谢谢。 – 2013-03-06 21:34:44