I want to forward a REST request to another server.
I use JAX-RS with Jersey and Tomcat. I tried it with setting the See Other
response and adding a Location
header, but it's not real forward.
If I use:
request.getRequestDispatcher(url).forward(request, response);
I get:
java.lang.StackOverflowError
: If the url is a relative pathjava.lang.IllegalArgumentException
: Path http://website.com does not start with a/
character (I think the forward is only legal in the same servlet context).
How can I forward a request?
Forward
The
RequestDispatcher
allows you to forward a request from a servlet to another resource on the same server. See this answer for more details.You can use the JAX-RS Client API and make your resource class play as a proxy to forward a request to a remote server:
Redirect
If a redirect suits you, you can use the
Response
API:Response.seeOther(URI)
: Used in the redirect-after-POST (aka POST/redirect/GET) pattern.Response.temporaryRedirect(URI)
: Used for temporary redirection.See the example:
It may be worth it to mention that
UriInfo
can be injected in your resource classes or methods to get some useful information, such as the base URI and the absolute path of the request.