我目前正在使用一个非常简单的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应用程序中处理/记录异常的更好方法是什么?
答案 0 :(得分: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" %>
然后您可以将您的日志记录放在<% %>
内并同时显示错误。所有的日志逻辑都在一个地方,你的代码看起来会更清晰。
您可以将位置指向servlet,而不是在JSP文件中使用scriptlet。 servlet可以处理所有处理,然后转发到JSP页面。
您也可以将此技术用于不同的异常,因此您可以采用不同的方式处理异常。
答案 1 :(得分:1)
有各种异常,因此您应首先确定如何向用户显示这些异常。将它们转发到页面以显示错误可能不是它们遇到的所有错误的最佳选择,同时请记住,在没有上下文的情况下显示错误可能会让某些最终用户感到困惑。
您可以处理的一种方法是记录所有非关键错误,并在网站上有一个用户可以访问和查看它们的位置。 (我参与了一个项目,我们有类似的东西。用户可以查看不会阻止应用程序继续运行的警告和错误。)
您可以将它们返回到发生错误的页面,并在那里填充错误消息。 AJAX / Comet可用于向用户显示实时错误,而无需将其从发生错误的页面中移除。