JSP Forward Vs Redirect

JSP Forward Vs Redirect: JSP Forward is faster than Redirect.

  Control can be 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. This is the major difference between forward and sendRedirect. When the forward is done, the original request and response objects are transferred along with additional parameters if needed.

In JSP Forward, URL remains intact. Server forwards the request to another resource within same server.

JSP Redirect is a 2 step process:

Step 1: JSP Container receives the request for current JSP. It compiles and run the JSP. During execution, it finds the redirect for new resource.

Step 2: It redirects to the new resource.

During these 2 steps, URL is changed as it is considered as a completely new request.

 Control can be 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. Since it is a new request, the old request and response object is lost.

JSP Redirect is slower than JSP forward where JSP container internally forwards the request to new resource and URL remains intact, hence user does not know about request forwarding.

When can we use forward and when can we use sendRedirect?

Technical scenario: redirect should be used 
1.If you need to transfer control to different domain
2.To achieve separation of task.

For example, database update and data display can be separated by redirect. Do the PaymentProcess and then redirect to displayPaymentInfo. If the client refreshes the browser only the displayPaymentInfo will be done again and PyamenProcess will not be repeated. But if you use forward in this scenario, both PaymentProcess and displayPaymentInfo will be re-executed sequentially, which may result in incosistent data.

For other than the above two scenarios, forward is efficient to use since it is faster than sendRedirect.

When we use forward method request is transfer to other resource within the same server for further processing.
In case of sendRedirect request is transfer to another resource to different domain or different server for futher processing.
In case of forward Web container handle all process internally and client or browser is not involved.
When you use SendRedirect container transfers the request to client or browser so url given inside the sendRedirect method is visible as a new request to the client.
When forward is called on requestdispather object we pass request and response object so our old request object is present on new resource which is going to process our request
In case of SendRedirect call old request and response object is lost because it’s treated as new request by the browser.
Visually we are not able to see the forwarded address, its is transparent
In address bar we are able to see the new redirected address it’s not transparent.
Using forward () method is faster then send redirect.
SendRedirect is slower because one extra round trip is required beasue completely new request is created and old request object is lost.Two browser request requird.
When we redirect using forward and we want to use same data in new resource we can use request.setAttribute () as we have request object available.
But in sendRedirect if we want to use we have to store the data in session or pass along with the URL.
<<Previous <<   || Index ||   >>Next >>