Alex Rivera | Logout

How to make custom 404 page be a forward, not a redirect in Tomcat

Asked 2010-10-18T22:01:47.743
10

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
Report

1 Answer

4

I don't quite understand why this works the way it does, but...

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);
answered 2011-06-12T20:05:44.970

Your Answer