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

在Tomcat中如何使自定义404页面成为转发而不是重定向,tomcat,servlets,error-handling,Tomcat,Servlets,Error Handling,我已经在Tomcat中提供了一个Spring MVC应用程序。当用户输入一个找不到的页面时,它会显示我的默认404页面,如web.xml中设置的 <error-page> <error-code>404</error-code> <location>/errors/404/</location> </error-page> 404 /错误/404/ 问题是,如果用户转到 它被重定向到 这很烦人,因为如果

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

<error-page>
   <error-code>404</error-code>
   <location>/errors/404/</location>
</error-page>

404
/错误/404/
问题是,如果用户转到

它被重定向到

这很烦人,因为如果用户键入了错误的URL,很难看到错误并纠正它


404错误之后,我希望它保留原始URL,但显示错误页面。(即转发,而不是重定向)。这就是我对大多数web服务器工作方式的印象。这可能吗?

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

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

((HttpServletResponse) response).setStatus(HttpServletResponse.SC_NOT_FOUND);
但是,如果您要求Tomcat发送页面,它只会转发并保持URL处于原始状态,正如我所寻找的那样

((HttpServletResponse) response).setStatus(HttpServletResponse.SC_NOT_FOUND);
((HttpServletResponse) response).sendError(HttpServletResponse.SC_NOT_FOUND);

如果您的目标是获取导致404的原始URL,那么req.getAttribute(“javax.servlet.error.request_uri”)对您有用吗?好提示-我不知道。但我的目标是用户友好。我希望URL保持在错误值,以便用户可以看到它,但要传递错误页面。您是否可以回答自己并关闭问题?您好。您只需调用senderro()。它设置状态。仅当您也要提供内容时才使用setStatus()。