servlet中的sendRedirect和forward都可以让浏览器转到不同的页面,他们的区别相差还是很大的。
1.他们的调用方法是不一样的,假设他们都是在ControlServlet使用这两种方式,当让浏览器转到MainFrameServlet页面时,sendRedirect方法需要要web应用名,但forward不需要。
//都是让浏览器转向同一个页面
response.sendRedirect("/myServlet/MainFrameServlet");
request.getRequestDispatcher("/MainFrameServlet").forward(request,response);
2.forward是发生在web服务器,也就是说它使用request请求web服务,所以ControlServlet与MainFrameServlet使用的是同一个request和response,也就是说这算一次Http请求,而sendRedirecr发生在浏览器,它使用的是response对象告诉浏览器转到MainFrame页面,这中间使用Httpfox会发现有两次请求,状态码分别是302和200,所以这算是两次http请求,所以两次的request和response不一样。3.URL的范围不一样,sendRedirect是两次http请求,所以它可以去往任何界面,但是forward由于是一次http请求,所以只能去往这个web应用下的资源界面。
4.forward可以使用request.setAttribute()方法将属性传递给下一个界面,因为它们是同一个http请求,Request对象是同一个,但sendRedirect不行,因为它发出的是两次http请求,上一次的Request对象已经被销毁。
5.forward方式转发多次时,浏览器地址栏中保留的是第一次转发时的地址URL,而sendRedirect保留的是最后一次的地址URL
特别注意:只要程序没有停止,也没有回到浏览器,就算一次http请求。