Как сделать пользовательскую страницу 404 форвардом, а не редиректом в Tomcat - PullRequest
10 голосов
/ 19 октября 2010

У меня есть приложение 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 Ответ

4 голосов
/ 13 июня 2011

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

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

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

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

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