I'm redirecting 404 errors to a servlet via the following in my web.xml.
<error-page>
<error-code>404</error-code>
<location>/notFound.do</location>
</error-page>
I'd like to log where the request was trying to go, but I'm not getting it from the referrer header: request.getHeader("referer")
That shows 'null' if I just hit any old random non-existent page.
And request.getRequestURL()/request.getRequestURI() both merely shows the final landing servlet info (I.e., /notFound).
Any way to get the 'bad' page URL that was requested?
Yes, it's available as a request attribute with the name javax.servlet.forward.request_uri
, which is keyed by RequestDispatcher#FORWARD_REQUEST_URI
. The error page location is namely invoked by a simple RequestDispatcher#forward()
call.
So, you can get it as follows in servlet:
String originalUri = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);
or in EL:
<p>Original URI: ${requestScope['javax.servlet.forward.request_uri']}</p>