如何使自定义404页面成为转发,而不是Tomcat中的重定向

Wil*_*ass 10 error-handling tomcat servlets

我在Tomcat中提供了一个Spring MVC应用程序.当用户输入未找到的页面时,它将显示我在web.xml中设置的默认404页面

<error-page>
   <error-code>404</error-code>
   <location>/errors/404/</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

问题是如果用户转到 http:// mydomain/bad/url

它被重定向到 http:// mydomain/errors/404 /

这很烦人,因为如果用户键入错误的URL,很难看出错误是什么并纠正错误.

404错误后,我希望它保留原始URL,但显示错误页面.(即前进,而不是重定向).这是我对大多数Web服务器如何工作的印象.这可能吗?

Wil*_*ass 4

我不太明白为什么会这样,但是......

我发现,如果您设置状态代码并得到空响应(或者如果您尝试转发到错误页面),Tomcat 将重定向到错误页面:

((HttpServletResponse) response).setStatus(HttpServletResponse.SC_NOT_FOUND);
Run Code Online (Sandbox Code Playgroud)

但是,如果您要求 Tomcat 发送页面,它只会转发并将 URL 保留为原始状态,正如我正在寻找的那样。

((HttpServletResponse) response).setStatus(HttpServletResponse.SC_NOT_FOUND);
((HttpServletResponse) response).sendError(HttpServletResponse.SC_NOT_FOUND);
Run Code Online (Sandbox Code Playgroud)