RequestDispatcher.forward与HttpServletResponse.sendRedirect
2009-09-10 18:30
441 查看
一、调用方式
我们知道,在servlet中调用转发、重定向的语句如下:
request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp
response.sendRedirect("new.jsp");//重定向到new.jsp
在jsp页面中你也会看到通过下面的方式实现转发:
<jsp:forward page="apage.jsp" />
当然也可以在jsp页面中实现重定向:
<%response.sendRedirect("new.jsp");//重定向到new.jsp%>
二、请求重定向与请求转发的比较:
(1)RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
路径:如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。
(2)调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。
(3)无论是RequestDispatcher.forward方法,还是HttpServletResponse.sendRedirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。
我们知道,在servlet中调用转发、重定向的语句如下:
request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp
response.sendRedirect("new.jsp");//重定向到new.jsp
在jsp页面中你也会看到通过下面的方式实现转发:
<jsp:forward page="apage.jsp" />
当然也可以在jsp页面中实现重定向:
<%response.sendRedirect("new.jsp");//重定向到new.jsp%>
二、请求重定向与请求转发的比较:
(1)RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
路径:如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。
(2)调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。
(3)无论是RequestDispatcher.forward方法,还是HttpServletResponse.sendRedirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。
相关文章推荐
- RequestDispatcher.forward() 方法和HttpServletResponse.sendRedirect()方法的区别
- 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)
- 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)
- HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法 血的教训
- RequestDispatcher.forward() 方法和HttpServletResponse.sendRedirect()方法的区别
- HttpServletResponse.sendRedirect()方法/RequestDispatcher.forward()方法
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- HttpServletResponse.sendRedirect()方法/RequestDispatcher.forward()方法
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- HttpServletResponse.sendRedirect方法实现的请求重定向与RequestDispatcher.forward方法实现的请求转发的总结比较
- HttpServletResponse.sendRedirect()方法/RequestDispatcher.forward()方法
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- [Java] HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- HttpServletResponse.sendRedirect()方法/RequestDispatcher.forward()方法
- RequestDispatcher.forward() 与 HttpServletResponse.sendRedirect()的区别
- HttpServletResponse.sendRedirect()方法/RequestDispatcher.forward()方法
- ServletRequest的getRequestDispatcher().forward()和HttpResponseServlet.sendRedirect()
- RequestDispatcher.forward和HttpServletResponse.sendRedirect