sendRedirect()重定向和forward()转发的比较
1
RequestDispatcher的forwar()方法只能将请求转发给自己web应用程序中的资源,而HttpServletResponse的sendRedirect()方法范围更大,可以重定向到站点内的其他web应用程序的资源,如果加了绝对URL则可以重定向到其他站点的资源。两者传递的URL都是以“/”开头,forward()是定位于web程序的根目录,而sendRedirect()重定向的位置为web站点的根目录。
2
RequestDispatcher的forwar()的地址栏中的URL不会改变,而HttpServletResponse的sendRedirect()的URL发生改变。
- 以下表示forward(),所以作为浏览器的我只发送和收到一次信息,也只跑了一个地方,中间发生了什么并不清楚,URL也没有发生改变。
- 以下表示sendRedirect(),所以使用该方法作为浏览器的我收到了发送并收到了两次信息,并且也跑了两个地方,所以URL地址改变。
3
forward()的调用者和被调用者属于同一个访问过程,它们之间共同使用request和response对象,对于内部资源的跳转,特别是请求预处理,使用forward();而sendRedirect()的调用者和被调用者使用不同的request和response对象,在不同web程序之间资源的跳转,使用sendRedirect();
4
两者也有共同之处,在调用这两者之前,内容不能被输出到客户端,并且会清除缓冲区里的内容。