web.xml和spring mvc配置文件中处理错误的区别

时间:2016-03-16 23:08:28

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

我有一个 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和我的自定义弹簧mvc配置文件中捕获错误之间的根本区别的问题。

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

2 个答案:

答案 0 :(得分:2)

您可以在java.lang.Exception中为web.xml添加一般错误处理程序,以防万一有任何事情逃脱Spring MVC错误处理机制。例如,您在Spring MVC基础结构本身中配置错误,因此Spring错误处理程序甚至没有机会处理错误。

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

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

答案 1 :(得分:1)

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

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

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

但是你必须确保你的HandlerExceptionResolver映射所有可能的异常。如果你有一个Throwable的条目,那么这应该就足够了。

如果您的HandlerExceptionResolver错过了一些异常,您的客户端会非常谨慎。如果正确设置,web.xml映射将变为还原