weidagang2046的专栏

物格而后知致
随笔 - 8, 文章 - 409, 评论 - 101, 引用 - 0
数据加载中……

What's the difference between "redirect" & "forward" in servelt?

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

posted on 2006-11-03 02:19 weidagang2046 阅读(507) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航: