Spring MVC未选择全局异常页面

Pro*_*lon 2 java tomcat servlets spring-mvc java-ee

继续线程: Apache Tiles和Spring MVC中的全局异常页面

我在web.xml中定义了一个错误页面:

<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/jsp/404.jsp</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

我注意到Spring MVC还有一个问题:

a)如果没有 @RequestMapping匹配,那么确实打印了我的自定义错误jsp.

b)如果a @RequestMapping匹配,但该方法设置错误状态,例如.

response.setStatus(404);
Run Code Online (Sandbox Code Playgroud)

然后选择Tomcat的(7.0.29)默认错误页面,而不是我的jsp.

为什么?如何让我的404页面始终显示?

eme*_*esx 5

我认为你所经历的是由你提到的那条线引起的: response.setStatus(404);

此方法不会触发容器的错误页面机制,应该在没有错误时使用它.要触发机制,您必须使用sendError,这是官方文档中推荐的.

BTW我刚刚发现Servlet规范之间的行为不同.2.3和2.4(在这里阅读).在2.3中,两种方法据说做同样的事情,而在2.4中它们有所不同.............