Java Web应用程序中的异常处理

cra*_*man 23 java logging struts exception-handling web-applications

我正在开发一个中型Java Web应用程序,Struts作为MVC框架,在数据访问层使用简单的JDBC.我一直在寻找这种应用程序中的异常处理最佳实践.我发现了几篇文章,其中一些是矛盾的,只会让我更加困惑,而不是让事情变得简单明了.有人说重用现有异常而不是定义特定于应用程序的异常更好,其他异常则为系统中可能发生的每个小麻烦提供了一个巨大的应用程序特定异常层次结构.有人说最好不要在数据访问层处理异常并将它们委托给服务层,其他人则说应该在本地捕获数据访问层异常,因为将它们委托给服务层会违反两层之间的抽象.等等.

如果您让我知道文章/书籍的链接/名称,我会非常感谢您提供在这种情况下适合您的可靠解决方案.解决方案应至少清楚以下几点,并提出理由:

  1. SQLExceptions被捕获的位置?
  2. 应该记录例外情况?
  3. 是否应记录未经检查的异常?
  4. 是否应该在表示层捕获未经检查的异常,是否应该向用户显示?
  5. 如何处理已检查的异常,将哪些异常显示给用户以及如何处理?
  6. 应该如何使用全局异常处理程序页面?
  7. 在这种情况下如何使用struts ActionErrors?

谢谢

Bal*_*usC 20

1:SQLExceptions被捕获的位置?

在数据访问层的DAO类中.如果需要,您可以使用自定义DAO异常进行包装.这个DAO异常又需要作为检查异常进一步处理.

2:应该记录例外情况?

在您即将访问throw它们或通过消息传递框架的那一刻.

3:是否应记录未经检查的异常?

他们当然应该被记录下来.它们应该不会出现在现实世界中,因为它们是代码逻辑中的错误标志(即开发人员错误),需要尽快修复.应该将它们一直扔到容器中,让容器用一个<error-page>in 处理它们web.xml.要记录(并最终邮寄)它们,请使用Filter在错误页面上侦听的内容.

4:应该在表示层捕获未经检查的异常,是否应该向用户显示?

它们根本不应该发生.

5:如何处理已检查的异常,将哪些异常显示给用户以及如何处理?

如果它们是错误用户输入的结果(例如,不是数字,错误的电子邮件,违反约束等),则以相同的形式向用户显示它们.否则(例如DB down,DAO异常等)要么将它一直抛到错误页面,要么显示错误并带有消息以便稍后再试.

6:如何使用全局异常处理程序页面?

至少以用户友好的方式.因此,在相同的布局中,有一些介绍性的"抱歉",如果需要,还有一些错误细节和电子邮件地址,以便用户可以联系该案例.

7:在这种情况下如何使用struts ActionErrors?

以相同的形式向用户显示它们.