1

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

我目前做这样的事情,

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应用程序中处理/记录异常的更好方法是什么?

回答

5

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

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

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

在JSP文件中添加

<%@page isErrorPage="true" %> 

然后你就可以把你的日志里面<% %>,并在同一时间显示错误。所有的日志逻辑都在一个地方,你的代码看起来更干净。


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

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

+0

这是否需要在错误JSP页面中使用脚本?我试图摆脱JSP中的代码。 – 2009-08-13 20:19:47

+0

JSP视图中不应该包含错误处理代码。错误应在其适当的部分处理并输出用户友好的消息。 – doomspork 2009-08-13 20:19:48

+1

您也可以使用servlet而不是JSP页面。 – scheibk 2009-08-13 20:28:27

1

有各种各样的例外,所以你应该首先确定你想如何显示给用户。将它们转发到页面以显示错误可能并不是他们遇到的所有错误的最佳选择,同时牢记显示没有上下文的错误可能会让一些最终用户感到困惑。

你可以处理它的一种方法是记录所有的非关键性错误,并在网站上有一个用户可以访问和查看它们的位置。 (我曾在一个项目上做过类似的工作,用户可以查看不会阻止应用程序继续执行的警告和错误。)

您可以将它们返回到发生错误的页面并填充那里有错误信息。 AJAX/Comet可以用来向用户显示实时错误,而不会将错误从发生错误的页面中移走。

相关问题