Java:MVC项目中的错误处理。如何正确实施?

Java:MVC项目中的错误处理。如何正确实施?,java,model-view-controller,error-handling,Java,Model View Controller,Error Handling,例如:我们有基于MVC的web应用程序。此外,对于这个应用程序,我们使用了:Spring、struts2和Hibernate框架 让我们来看看小场景:用户尝试保存一些实例,例如:BO Book 因此,用户填写表单字段并向服务器发送请求: 服务器上发生了什么 执行action方法action.Save() 内部Action.Save()调用Service.Save() 内部Service.save()调用daohbernate.save() 内部daohbernate.save()调用getHi

例如:我们有基于
MVC
的web应用程序。此外,对于这个应用程序,我们使用了:
Spring
struts2
Hibernate
框架

让我们来看看小场景:用户尝试保存一些实例,例如:BO Book

因此,用户填写表单字段并向服务器发送请求:

服务器上发生了什么

  • 执行action方法
    action.Save()
  • 内部
    Action.Save()
    调用
    Service.Save()
  • 内部
    Service.save()
    调用
    daohbernate.save()
  • 内部
    daohbernate.save()
    调用
    getHibernateTemplate().save()
方法
getHibernateTemplate.save()
-它是框架实现,因此我们无法访问此方法。我们只知道,如果此方法内部出现故障,将抛出
DataAccessException

所以,现在我想,如何正确地实现我的日志记录和错误处理

在哪一层

在道层面上?服务水平

还是在级别上的Struts操作

你觉得这个怎么样

还是需要在每个层面上


您可以推荐哪些最佳实践?

以下是您的体系结构:

您希望如何处理DAO层上的错误?返回假数据?空收藏?如果不能,就让异常弹出

那么在服务层上如何处理呢?您知道数据库不工作,那么您可以返回Struts操作吗?一个空的结果?错误对象?异常不是一个错误对象吗

因此,Struts操作中会出现异常。这里有一些选择。如果异常实际上会告诉用户一些事情,并且您的GUI已经准备好,那么您可以返回不同的视图(并在此处记录异常)

但是,如果在Struts操作中捕捉到一个
NullPointerException
,该怎么办?你会在每个Struts动作中分别处理它吗?不,所以进一步传递异常(!)

我想你明白了——只要你不知道如何处理异常(而且日志记录没有处理),就让客户机来收拾残局。否则,您只会隐藏问题并增加损失(例如,事务不会回滚,用户看到不正确的结果)

我建议实现通用异常处理机制,该机制记录异常并将HTTP500返回给用户。应显示温和的错误消息(无堆栈跟踪),并向用户道歉。您应该调查到达该层的每个错误

据我所知,Struts(以及几乎所有web框架)都有一些集中处理异常的方法。()