转载自:http://blog.csdn.net/senmon2004/article/details/654049
forward
是服
务
器
请
求
资
源,服
务
器直接
访问
目
标
地址的
URL
,把那个
URL
的响
应
内容
读
取
过
来,然后把
这
些内容再
发给浏览
器,
浏览
器根本不知道服
务
器
发
送的内容是从哪儿来的,所以它的地址
栏
中
还
是原来的地址。
redirect 就是服 务 端根据 逻辑 , 发 送一个状 态码 , 告 诉浏览 器重新去 请 求那个地址,一般来 说浏览 器会用 刚 才 请 求的所有参数重新 请 求,所以 session,request 参数都可以 获 取
redirect 就是服 务 端根据 逻辑 , 发 送一个状 态码 , 告 诉浏览 器重新去 请 求那个地址,一般来 说浏览 器会用 刚 才 请 求的所有参数重新 请 求,所以 session,request 参数都可以 获 取
前者
仅
是容器中控制
权
的
转
向,在客
户
端
浏览
器地址
栏
中不会
显
示出
转
向后的地址;后者
则
是完全的跳
转
,
浏览
器将会得到跳
转
的地址,并重新
发
送
请
求
链
接。
这样
,从
浏览
器的地址
栏
中可以看到跳
转
后的
链
接地址。所以,前者更加高效,在前者可以
满
足需要
时
,尽量使用
forward()
方法,并且,
这样
也有助于
隐
藏
实际
的
链
接。
在有些情况下,比如,需要跳
转
到一个其它服
务
器上的
资
源,
则
必
须
使用sendRedirect()方法。
a
页
面
-------->b
页
面
(-->
代表两
种
方法的一
种
)
a
页
面里有一个
动
作:
request.setAttribute("temp",object);
Response.forward()---->用
这
个方法到达
b,可以在b里通
过
request.getAttribute("temp")得到存
储
的
object
对
象,
这
个方法
扩
大了
request里保存的
值
的作用范
围
;
Response.redirect()---->用
这
个方法到达
b,object
对
象将
丢
失。
如果想到达b
页
面(无
论
是哪个方法)而有想得到
object
对
象,
则
最好将
object
对
象保存在
request.getSession()里,也就是Session
对
象
里
-----------------分割线-----------------
小结:
forward: 服务器端跳转(转发),在下一个页面中,request保留上一个页面中的request的所有值
redirect: 客户端跳转,不传递request对象。