1.sendRedirect时,服务器端先响应客户端一个状态码(通常是302),告诉客户端应该向location报头指定的URL(可以是相对路径)重新发送请求。然后客户端按照指示进行第二次请求;
2.forward时,操作完全在服务器端进行,由服务器直接执行新的URL。客户端甚至毫不知情。
3.由于sendRedirect是由客户端自动请求的,所以客户的第一次的请求数据就不能得到保存;相反,在forward的情况,客户第一次的请求数据得到了保存,即在新的URL里能够得到原先的请求数据。
4.在相同的情况下,由于sendRedirect相当于客户的两次请求,所以forward的效率较sendRedirect要好。
5.sendRedirect()一定要在response对象,别的语言的头域输出没有输出正文时才能使用,因为按W3C标准,头域在在输出后是不许改变状态的,只有JSP和SERVLET可以改变它,而一但有正文输出,就会产生BUFFER阻塞.
比如\r
<%
out.println("sss");
response.sendRedirect("url");
%>
这是错误的.或者在此之前有HTML
<HTMLMWPW>
<%
response.sendRedirect("url");
%>
这了是错误的,因为HTML内容也是out对象输出的,response对象已经被占用.这时应该用forward()才对.