What is the difference between response.sendRedirect() and request.getRequestDispatcher().forward(request,response)

roger picture roger · Dec 4, 2013 · Viewed 158.4k times · Source

I have got a problem with my page jump when I use JAVA, if I use:

response.sendRedirect("login.jsp")

then I get this url: http://localhost:8080/login.jsp

But if I use

request.getRequestDispathcer("login.jsp").forward(request, response)

then I get this url: http://localhost:8080/Shopping/login.jsp (the "Shopping" is the name of my module).

What's the difference?

Answer

Keerthivasan picture Keerthivasan · Dec 4, 2013

To simply explain the difference,

  response.sendRedirect("login.jsp");

doesn't prepend the contextpath (refers to the application/module in which the servlet is bundled)

but, whereas

 request.getRequestDispathcer("login.jsp").forward(request, response);

will prepend the contextpath of the respective application

Furthermore, Redirect request is used to redirect to resources to different servers or domains. This transfer of control task is delegated to the browser by the container. That is, the redirect sends a header back to the browser / client. This header contains the resource url to be redirected by the browser. Then the browser initiates a new request to the given url.

Forward request is used to forward to resources available within the server from where the call is made. This transfer of control is done by the container internally and browser / client is not involved.