views:

48

answers:

0

I've got a Spring MVC app served in Tomcat. When the user enters a page that isn't found, it displays my default 404 page, as set in web.xml

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

The problem is that if the user goes to http://mydomain/bad/url

it is redirected to http://mydomain/errors/404/

This is annoying, because if a user types in an incorrect URL it's hard to see what the mistake was and correct it.

After a 404 error, I'd like it to keep the original URL, but display the error page. (i.e. a forward, not a redirect). That's my impression of how most web servers work. Is this possible?

edit: I've discovered that if you set the status code and have an empty response (or if you try to forward to the error page), Tomcat will redirect to the error page:

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

But if you ask Tomcat to send the page, it will just forward and leave the URL in the original state, as I'm looking for.

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