转发(forward)和重定向(redirect)的区别



转发和重定向有很大的区别,它们的区别如下:

  1. request.getRequestDispatcher().forward() 方法只能将请求转发给同一个WEB应用组件;而response.sendRedirect()方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。如果传递给response.sendRedirect()方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。

  2. 调用response.sendRedirect()方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变由初始的URL地址变成重定向的目标URL;调用request.getRequestDispatcher().forward()方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

  3. response.sendRedirect()方法对浏览器的请求直接作出相应,相应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;request.getRequestDispatcher().forward()方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了相应结果,并不知道在服务器程序内部发生了转发行为。

  4. request.getRequestDispatcher().forward()方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和相应过程;而response.sendRedirect()方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和相应过程。

猜你喜欢

转载自blog.csdn.net/yxyy_yyqx/article/details/79839337