如何处理Java MVC web应用程序中的错误/记录错误?

如何处理Java MVC web应用程序中的错误/记录错误?,java,model-view-controller,exception,web-applications,error-handling,Java,Model View Controller,Exception,Web Applications,Error Handling,我目前正在使用一个非常简单的MVC框架,对于那些不熟悉的人来说,它与SpringMVC非常相似(至少在概念上)。我面临的问题之一是如何正确处理异常 我现在正在做这样的事情 try { //do something }catch (Exception ex) { logger.error("Logging error", ex); Map model = new HashMap(); model.put("error", ex.getLocalizedMessage

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

我现在正在做这样的事情

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

您可以在web应用程序中完成所有日志记录

将其添加到web.xml文件中

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

java.lang.Throwable
/error.jsp
在jsp文件中添加

<%@page isErrorPage="true" %>

然后,您可以将日志记录放在
中,同时显示错误。您的所有日志逻辑都将放在一个地方,您的代码将开始看起来更干净


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


您还可以对不同的异常使用此技术,因此可以对异常进行不同的处理。

您可以在一个数据库中完成所有日志记录

将其添加到web.xml文件中

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

java.lang.Throwable
/error.jsp
在jsp文件中添加

<%@page isErrorPage="true" %>

然后,您可以将日志记录放在
中,同时显示错误。您的所有日志逻辑都将放在一个地方,您的代码将开始看起来更干净


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


您还可以对不同的异常使用此技术,以便以不同的方式处理异常。

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

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


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

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

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


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

这是否需要在错误JSP页面中使用scriplets?我试图摆脱JSP.JSPs中的代码,视图中不应该有错误处理代码。错误应该在适当的段中处理,并输出用户友好的消息。您也可以使用servlet而不是JSP页面。是的,只要在servlet中定义了位置。我的答案中的链接说明了这一点。这是一个非常优雅的web应用解决方案。在世界的桌面端,我们在每个线程上配置全局异常处理程序,但是当您无法控制哪些线程正在执行什么操作时,这会更干净。这是否需要在错误JSP页面中使用scriplets?我试图摆脱JSP.JSPs中的代码,视图中不应该有错误处理代码。错误应该在适当的段中处理,并输出用户友好的消息。您也可以使用servlet而不是JSP页面。是的,只要在servlet中定义了位置。我的答案中的链接说明了这一点。这是一个非常优雅的web应用解决方案。在世界的桌面端,我们在每个线程上配置全局异常处理程序,但是当您无法控制哪些线程正在执行什么操作时,这会更干净。