相关文章推荐
绅士的灭火器  ·  Oracle 与 TiDB ...·  11 月前    · 
果断的大脸猫  ·  OpenVPN2.4.3 ...·  1 年前    · 

可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源

而请求转发时,类似于是服务器自己向自己发了一个跳转,然后将结果直接给游览器,这也是问什么游览器会不改变url地址。下面是具体总结他们的区别

一、response.sendRedirect(url)- 服务器将新 url 发送给游览器,游览器再根据新 url 请求

Request.getRequestDispatcher(url).forward(request,response); 请求转发到指定 url (服务器内部跳转 url 然后将结果发给游览器)

二、response.sendRedirect(url)-- 客户端跳转

Request.getRequestDispatcher(url).forward(request,response)-- 服务器跳转

三、 response.sendRedirect(url)-- 跳转到指定 url 地址后,上个页面的请求会结束, request 对象会消亡,数据会消亡。

Request.getRequestDispatcher(url).forward(request,response)-- 内部跳转, request 对象一直存在

四、response.sendRedirect(url)-- 网址会改变

Request.getRequestDispatcher(url).forward(request,response)-- 以游览器角度来看,他只是发送一个 request 然后收到一个 response, 所以 url 不变

五、response.sendRedirect(url)-- 传参数需要在 url 后加参数。

Request.getRequestDispatcher(url).forward(request,response)- 传参数可以操作 request 对象方法 setAttribute( “name”,value)

六、response.sendRedirect(url)- 可以定位到任意的网址

Request.getRequestDispatcher(url).forward(request,response)- 只能定位到服务器资源

七、response.sendRedirect(url)-- 可以重定向有 frame jsp 文件

Resquest.getRequestDispatcher(url).forward(request,response)- 不可以重定向有 frame jsp 文件,可以定向到有 frame html 文件,只有在客户端没有输出时才可以调用 forward 方法,如果当前页面缓冲区不是空的,那么该句可能不起作用,由于这种提交不会改变 url 地址,刷新会重复提交。