【问题标题】:Difference between handling errors in web.xml and spring mvc config fileweb.xml 和 spring mvc 配置文件中处理错误的区别
【发布时间】:2016-07-03 02:25:32
【问题描述】:

我有一个 Spring MVC Web 应用程序,它有一个 org.springframework.web.servlet.handler.HandlerExceptionResolver,它可以捕获所有异常并将它们映射到相应的预定义错误视图和 http 状态代码。这个HandlerExceptionResolverwebmvc-config.xml 文件中定义在src/main/webapp/WEB-INF 下。

现在,我的客户坚持说我还需要在我的 web.xml 文件中映射 http 状态代码和异常,我无法理解,因为我看不出在什么情况下我的 Spring MVC 应用程序将无法捕获错误,需要web.xml处理。

话虽如此,这让我想到web.xml 中捕获错误和我的自定义spring mvc 配置文件之间的根本区别是什么

有人可以帮忙吗?非常感谢!

【问题讨论】:

    标签: java spring spring-mvc error-handling exception-handling


    【解决方案1】:

    这两种机制都有效。但是 HandlerExceptionResolver 比 web.xml 中的标准 web.xml 映射更灵活。与 web.xml 中的错误映射相比,HandlerExceptionResolver 为您提供了一种处理异常的编程方法。

    例如,您可以覆盖提供的实现或使用自定义逻辑实现自定义 HandlerExceptionResolver,例如在转发到您的视图之前向系统管理员发送电子邮件。

    另一个优点是您的处理程序异常解析器是一个 Spring bean,它可以访问您的应用程序上下文中的所有服务。

    但是您必须确保您的 HandlerExceptionResolver 映射所有可能的异常。如果您有 Th​​rowable 条目,那么这就足够了。

    您的客户只是小心谨慎,以防您的 HandlerExceptionResolver 遗漏一些异常。如果正确设置 web.xml 映射将变得多余

    【讨论】:

    • 您好,感谢您的回答。但为什么是 Throwable?抓住java.lang.Exception 还不够吗?我问这个是因为客户还坚持要我在web.xml 中捕获RuntimeException。这对我来说没有意义,因为我已经在 web.xml 中捕获了 java.lang.Exception
    • Throwable 涵盖了异常和错误
    【解决方案2】:

    您可以在web.xml 中为java.lang.Exception 添加一个通用错误处理程序,以防万一任何东西逃脱了Spring MVC 错误处理机制。例如,您错误地配置了 Spring MVC 基础架构本身的某些内容,因此 Spring 错误处理程序甚至没有机会处理错误。

    但是,您不应该在web.xml 中重新映射 http 状态代码,因为这样容器将拦截从 Spring MVC 返回的所有生成的错误响应,并将其替换为由@987654325 中定义的错误处理程序生成的结果@。当然,您可以注意错误处理程序调用与 Spring 处理程序相同的逻辑,以便返回的错误响应相同,但显然这是一项不必要的工作。

    我会说你应该与你的客户更详细地讨论这个问题,并向他们解释与Front Controller pattern相关的概念和最佳实践。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 2012-09-30
      • 2015-01-13
      • 1970-01-01
      相关资源
      最近更新 更多