可以看出,重定向时,是服务器向游览器重新发送了一个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
地址,刷新会重复提交。