一、特点
1. 重定向的特点 (客户端行为)
response.sendRedirect(“路径”)
a. 地址栏发生改变
b、重定向可以访问其他站点(服务器)的资源
c、重定向是两次请求。不能使用request对象来共享数据
2. 转发的特点 (服务器端行为)
request.getRequestDispatcher(“路径”).forward(request,response)
a. 转发的地址栏路径不变
b. 转发只能访问当前服务器下的资源
c. 转发是一次请求。可以使用request对象来共享数据
二、不同点
通过了解两者的特点之后,我们可以发现两者重要的不同:
- 当使用转发时,jsp使用一个内部的方法来调用目标页面,新的页面同时处理同一个请求,而浏览器不知道这个过程。所以之前在request域中存放的对象仍然可以使用,相当于将两个页面拼在了一起。
- 当使用重定向时,浏览器 url 会变成新页面的 url,浏览器又发送了一次请求,所以速度会比转发慢,并且产生新的请求之后,request域中的对象也将无法使用。
通过二者的不同点可以简单的理解为:
如果你需要找一班的张三
重定向 :你先来到了二班,二班的人说:张三是一班的,然后你就从二班出来,去了一班找到了张三
转发:你先来到了二班,二班的人自己去一班把张三带到你的面前,而你还是以为张三在二班
三、用法
- 因为转发速度快,并且能保存request域中的对象,所以当没有特殊需求时,应优先选择转发
- 如果需要在两个页面之间传递变量时,应使用转发,如果使用session作用域,会增大变量的作用域
- 转发面向的只是当前服务器内部的资源,如果需要访问外部站点,则使用重定向
- 如果需要对数据进行增删改查,应该使用重定向,因为如果使用转发,操作前后的地址栏不发生改变,如果对页面进行刷新的话,就会重新执行之前的操作,造成数据二次改动。