forward
和
redirect
的区
别
答: forward 是服 务 器 请 求 资 源,服 务 器直接 访问 目 标 地址的 URL ,把那个 URL 的响 应 内容 读 取 过 来,然后把 这 些内容再 发给浏览 器, 浏览 器根本不知道服 务 器 发 送的内容是从哪儿来的,所以它的地址 栏 中 还 是原来的地址。
redirect 就是服 务 端根据 逻辑 , 发 送一个状 态码 , 告 诉浏览 器重新去 请 求那个地址,一般来 说浏览 器会用 刚 才 请 求的所有参数重新 请 求,所以 session,request 参数都可以 获 取
答: forward 是服 务 器 请 求 资 源,服 务 器直接 访问 目 标 地址的 URL ,把那个 URL 的响 应 内容 读 取 过 来,然后把 这 些内容再 发给浏览 器, 浏览 器根本不知道服 务 器 发 送的内容是从哪儿来的,所以它的地址 栏 中 还 是原来的地址。
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
对
象
里