2009-12-21 62 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