Suppose you have a servlet that just does another redirect to another URL:
protectedvoid doGet(HttpServletRequest request, HttpServletResponse response)
{
response.sendRedirect("/anotherURL");
}
This servlet is accessible through the URL /redirectServlet.
When the client browser makes a request for /redirectServlet, it receives a response (an HTTP 302 response) that tells it that the document it requested can actually be found at /anotherURL. The client uses the URL it gets and makes a new request to /anotherURL.
The redirect URL doesn't have to be on the same server as the original URL. If the redirect URL (/anotherURL) points to another servlet, new request and response objects will be created to handle the new request.
Suppose our redirect servlet is now changed to do a forward instead of a redirect:
protectedvoid doGet(HttpServletRequest request, HttpServletResponse response)
{
ServletContext context = getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher("/anotherURL");
dispatcher.forward(request, response);
}
This modified servlet is accessible through the URL /forwardServlet.
When the client makes a request to our forwarding servlet this time, it no longer receives the redirect response. The dispatcher.forward line causes the servlet container to run the servlet associated with the url /anotherURL directly. The client will receive the result of /anotherURL, even though they requested /forwardServlet.
A few more notes:
* Redirect is a two step process. The web server tells the browser to request a second URL.
* If the user reloads, the second URL will be reloaded (/anotherURL instead of /redirectServlet).
* Redirect is always slower than a forward because it requires a second client request.
* Attributes placed in the request scope of the redirecting servlet are not available in the request scope of the second rrequest.
* Forwards are performed internally to the web server.
* The browser is completely unaware that the forward took place - the original URL (/forwardServlet) remains in the address bar.
* If the user does a reload, the browser will repeat the original request with the original URL (/forwardServlet).
from:
http://forum.java.sun.com/thread.jspa?threadID=627801&messageID=3597659