Как сделать пользовательскую страницу 404 форвардной, а не перенаправляемой в Tomcat

У меня есть приложение Spring MVC, работающее в Tomcat. Когда пользователь вводит страницу, которая не найдена, она отображает мою страницу 404 по умолчанию, как установлено в web.xml

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

Проблема в том, что если пользователь переходит к http://mydomain/bad/url

он перенаправляется на http://mydomain/errors/404/

Это раздражает, потому что, если пользователь вводит неверный URL-адрес, трудно понять, что произошло, и исправить его.

После ошибки 404 я бы хотел, чтобы он сохранил исходный URL-адрес, но отобразил страницу с ошибкой. (т.е. переадресация, а не перенаправление). Это мое впечатление о том, как работает большинство веб-серверов. Возможно ли это?

Ответ 1

Я не совсем понимаю, почему это работает так, как это происходит, но...

Я обнаружил, что если вы установите код состояния и получите пустой ответ (или если вы попытаетесь переслать страницу с ошибкой), Tomcat перенаправит на страницу с ошибкой:

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

Но если вы попросите Tomcat отправить страницу, она просто перейдет и оставит URL в исходном состоянии, как я и ищу.

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