Forward versus redirect forward() (in JSP: jsp:forward) - forward is performed internally by the servlet - the browser is completely unaware that it has taken place, so its original URL remains intact - any browser reload will simple repeat the original request, with the original URL forward() just routes the request to the new resources which you specify in your forward call. That means this route is made by the servlet engine at the server level only. No headers are sent to the browser which makes this very eficient. Also the request and response objects remain the same both from where the forward call was made and the resource which was called. Example: private void myForward(MyDestinationPage aDestination, HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletException, IOException { RequestDispatcher dispatcher = aRequest.getRequestDispatcher(aDestination.toString()); dispatcher.forward(aRequest, aResponse); } redirect (sendRedirect()) (in JSP: response.sendRedirect() ) - redirect is a two step process, where the web application instructs the browser to fetch a second URL, which differs from the original - a browser reload of the second URL will not repeat the original request, but will rather fetch the second URL - redirect is always slower than a forward, since it requires a second browser request - beans placed in the original request scope are not available to the second request response.sendRedirect() invokes a new resource while the contents sent in its query url. sendRedirect always sends a header back to the client/browser. This header then contains the resource (page/servlet) which you wanted to be redirected. The browser uses this header to make another fresh request. Thus sendRedirect has a overhead as to the extra remort trip being incurred. Its like any other Http request being generated by ur browser. the advantage is that you can point to any resource(whether on the same domain or some other domain). for eg if sendRedirect was called at www.mydomain.com then it can also be used to redirect a call to a resource on www.theserverside.com. Example: private void myRedirect(MyDestinationPage aDestinationPage, HttpServletResponse aResponse) throws IOException { String urlWithSessionID = aResponse.encodeRedirectURL(aDestinationPage.toString()); fLogger.fine("REDIRECT: " + urlWithSessionID); aResponse.sendRedirect( urlWithSessionID ); }