forward和redirect区别

本文详细对比了服务器内部重定向forward与客户端重定向redirect的区别。forward能在服务器内部进行重定向,并保持request状态信息不变,适用于同一上下文内的页面跳转;而redirect通过客户端发起新的请求,适合跨域跳转,但不能传递request属性。此外,文章还讨论了它们在实际应用中的优缺点及使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的时候,如果没有传递那些参数的话,可能会导致失败


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值