Как сделать пользовательскую страницу 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);