您的位置:首页 > 其它

forward和redirect区别

2016-02-29 10:27 197 查看
1.forward 是服务器内部重定向,程序收到请求后重新定向到另一个程序,而客户机并不知晓(地址栏不变):

forward会将request、state、bean等信息带到下一个jsp页面,可以用getAttribute()来取得前一个jsp所放的信息。

2.redirect 是服务器收到请求后发送一个状态头给客户端,客户端将再次请求,就有两次外部请求:

redirect 是送到客户端后再次request,由于对request.setAttribute() 来说, 它携带的对象生存范围只在request内, 所以Redirect方式会导致request携带的对象丢失。

注意: 1.由于redirect方式有两个外部请求,所以效率较forward低。

          2.forward只能是在相同的context中才行,但redirect就不受此限制。

  3.forward是不用再经过filter的,forward是可以访问到受保护资源的(在WEB-INF目录下的资源). 

  4.用forward方式时,刷新时会出问题。

示例:

拿系统登录举个例子,这里用了Struts。 
用户在login.jsp输入用户名、密码,提交到login.do,由类LoginAction响应登录请求,LoginAction验证用户密码正确以后,要将控制转向showMainPageUI.do(或者mainpage.jsp),这时要用redirect还是forward呢? 
当然是redirect!为什么呢?考虑一下showMainPageUI.do这个Action的职责,显而易见是要显示主页面,这和登录的动作有什么关系?没什么关系!我们把登录和显示主页面设计成两个相对独立的用户交互过程,将他们解耦,这有利于各自的重用--showMainPageUI.do不一定从登录转过来,可以从任意一个请求转过来。 
如果用forward的话,有两个害处:1、用户在主页面选择刷新的话,会重新触发登录的动作,这对于系统增加了不必要的负担;2、由于forward允许传递request参数,程序员可能会利用这个特性在login.do和showMainPageUI.do之间传递其它参数,这将产生不必要的耦合,在其它请求转入showMainPageUI.do的时候,如果没有传递那些参数的话,可能会导致失败
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  forward redirect