forward与redirect转发的区别

Forward 和Redirect的区别

Forward是container直接将request到一个别的组件,这种方式下,实际上也就是response之前,用户请求request对象可以经过多个组件处理。request的parameters会传递到新的组件,如果新的组件path也包含query string,这部分参数也会加到request中,如果参数名重复,就覆盖旧的值。这种是Forward 元素定义的forward对象缺省的转向方式。

Redirect方式利用的是HTTP协议中的redirect机制,让客户端发起新的请求,到新的URI。初始的参数和request上下文都不在了。只有Action Forward路径中定义的参数。这种方式需要在struts配置文件中,将Forward元素的redirect属性设置为true。

项目中遇到相关的问题。点击logout,虽然session invalidate了,但是,退回到登录提交的地方,刷新页面就可以再次进入。用了一些方法,如清除历史, html头设置no cache,响应头设no cache都没有作用。后来发现是浏览器在刷新某个历史页面的时候,同时提交了历史的表单。于是,我们在struts配置文件中将登录后的Action Forward 设置为redirect方式的,这样,历史中登录提交的页面实际上是Forward后的Action,刷新请求,自然,是非法访问了,问题就解决了。  

==========================================================

    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
   redirect
是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值