文章目录
一、介绍
1.实现
转发:用request的getRequestDispatcher()方法得到ReuqestDispatcher对象,调用forward()方法
request.getRequestDispatcher("other.jsp").forward(request, response);
重定向:调用response的sendRedirect()方法
response.sendRedirect("other.jsp");
2.地址栏
转发:不变,不会显示出转向的地址
重定向:会显示转向之后的地址
3.请求
重定向:至少提交了两次请求
4.数据
转发:对request对象的信息不会丢失,因此可以在多个页面交互过程中实现请求数据的共享
重定向:request信息将丢失
5.原理
转发:是在服务器内部控制权的转移,是由服务器区请求,客户端并不知道是怎样转移的,因此客户端浏览器的地址不会显示出转向的地址。
重定向:是服务器告诉了客户端要转向哪个地址,客户端再自己去请求转向的地址,因此会显示转向后的地址,也可以理解浏览器至少进行了两次的访问请求。
二、调用方式
情景一:在servlet中调用转发、重定向
转发到new.jsp
request.getRequestDispatcher(“new.jsp”).forward(request, response);
重定向到new.jsp
response.sendRedirect(“new.jsp”);情景二:在jsp页面中实现转发、重定向
-转发到new.jsp
<jsp:forward page=“new.jsp” />
//重定向到new.jsp%
<%response.sendRedirect(“new.jsp”);
三、小结
1、转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();
2、转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;
3、转发是服务器行为,重定向是客户端行为;
4、转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;
5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)
四、转发和重定向的选择
1、重定向的速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向都无所谓的时候建议使用转发。
2、因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了。
3.一般项目的增删改需要跳转到其他页面,所以用重定向。
而查询信息,一般只在当前页面,所以常用转发方式。
总之:通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择重定向。