【问题标题】:How do you handle/log errors in a Java MVC web application?您如何处理/记录 Java MVC Web 应用程序中的错误?
【发布时间】:2009-08-13 20:10:43
【问题描述】:

我目前正在使用一个非常简单的 MVC 框架,Bear Bibeault's Front Man,对于那些不熟悉的人来说,它与 Spring MVC 非常相似(至少在概念上)。我遇到的问题之一是如何正确处理异常。

我目前正在做这样的事情,

try {
    //do something
}catch (Exception ex) {
    logger.error("Logging error", ex);
    Map model = new HashMap();
    model.put("error", ex.getLocalizedMessage());
    cc.setScopedVariable("model", model);
    cc.forwardToView(ERROR_VIEW);
}

基本上我会记录异常,然后转发到错误视图页面。

然而,这让我觉得这不是正确的做法。这会导致很多样板代码不是很干。

在 Web 应用程序中处理/记录异常的更好方法是什么?

【问题讨论】:

    标签: java model-view-controller exception web-applications error-handling


    【解决方案1】:

    您可以在 error JSP file 中完成所有日志记录。

    将此添加到您的 web.xml 文件中。

    <error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/error.jsp</location> 
    </error-page>
    

    在你的jsp文件中添加

    <%@page isErrorPage="true" %>
    

    然后您可以将您的日志记录放在&lt;% %&gt; 中并同时显示错误。您的所有日志记录逻辑都将集中在一个位置,您的代码将开始看起来更清晰。


    您可以将位置指向 servlet,而不是在 JSP 文件中使用 scriptlet。 servlet 可以处理您的所有处理,然后转发到 JSP 页面。

    您也可以将此技术用于不同的异常,因此您可以以不同的方式处理异常。

    【讨论】:

    • 这是否需要在错误 JSP 页面中使用脚本?我正在尝试摆脱 JSP 中的代码。
    • JSP 视图中不应包含错误处理代码。错误应在其适当的部分进行处理,并输出用户友好的消息。
    • 您也可以使用 servlet 代替 JSP 页面。
    • 可以,只要在 servlet 中定义了位置。我的答案中的链接证明了这一点。
    • 这是一个非常优雅的网络应用解决方案。在世界的桌面端,我们在每个线程上配置全局异常处理程序,但是当您无法控制哪些线程正在做什么时,这会更清晰。
    【解决方案2】:

    有不同种类的异常,因此您应该首先确定您希望如何向用户显示它们。将它们转发到页面以显示错误可能不是他们遇到的所有错误的最佳选择,但请记住,在没有上下文的情况下显示错误可能会使某些最终用户感到困惑。

    您可以处理它的一种方法是记录所有非严重错误,并在网站上设置用户可以访问和查看它们的位置。 (我在一个项目中遇到过类似的情况。用户可以查看不会阻止应用程序继续进行的警告和错误。)

    您可以将它们返回到发生错误的页面并在那里填充错误消息。 AJAX/Comet 可用于向用户显示实时错误,而无需将它们从发生错误的页面中移除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 2010-10-11
      • 2010-11-24
      • 2010-10-02
      • 1970-01-01
      相关资源
      最近更新 更多