Thursday, December 13, 2012

RequestDispatcher vs sendRedirect in JSP Servlet.


When you say sendRedirect(uri).
1. The response first goes back to browser and again a new request is created for the uri specified.
2. As a result old request attributes and parameters will be lost while creating new request.
3. Since you are anyway creating new request, you can specify uri that is out of the context.
4. As the request is coming from browser this is also called client side call.
5. The session still remains active and accessible if you are in the same context. Only request attributes and parameters are lost from scope.


But when you say RequestDispatcher forward(uri)

1. The server looks for the uri within the context and sends the final response back to browser.
2. URI lookup happens at the server in this case. Hence it is called server side.

The forward method of RequestDispatcher will forward the ServletRequest and ServletResponse that it is passed to the path that was specified in getRequestDispatcher(String path). The response will not be sent back to the client and so the client will not know about this change of resource on the server. This method is useful for communicating between server resources, (servlet to servlet). Because the request and response are forwarded to another resource all request parameters are maintained and available for use. Since the client does not know about this forward on the server, no history of it will be stored on the client, so using the back and forward buttons will not work. This method is faster than using sendRedirect as no network round trip to the server and back is required. 

An example using forward:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
  RequestDispatcher rd = request.getRequestDispatcher("pathToResource");
  rd.forward(request, response);


The sendRedirect(String path) method of HttpServletResponse will tell the client that it should send a request to the specified path. So the client will build a new request and submit it to the server, because a new request is being submitted all previous parameters stored in the request will be unavailable. The client's history will be updated so the forward and back buttons will work. This method is useful for redirecting to pages on other servers and domains.

An example using sendRedirect:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
  response.sendRedirect("pathToResource");
}


No comments:

Post a Comment

Creating mirror of BST