我有一个 Spring MVC Web应用程序,它有org.springframework.web.servlet.handler.HandlerExceptionResolver
捕获所有异常并将它们映射到相应的预定义错误视图和http状态代码。此HandlerExceptionResolver
在webmvc-config.xml
下的src/main/webapp/WEB-INF
文件中定义。
现在,我的客户端坚持认为我还需要在我的web.xml
文件中映射http状态代码和异常,这是我无法理解的,因为我没有看到我的Spring MVC应用程序在什么情况下会失败捕获错误,需要由web.xml
处理。
话虽如此,这让我想到了在web.xml
和我的自定义弹簧mvc配置文件中捕获错误之间的根本区别的问题。
有人可以帮忙吗?非常感谢!
答案 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映射将变为还原