forward与redirect转发的区别_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2064 | 回复: 0   主题: forward与redirect转发的区别        下一篇 
    本主题由 koei123 于 2015-7-14 11:05:51 移动
wayne
注册用户
等级:中校
经验:1690
发帖:221
精华:0
注册:2011-7-21
状态:离线
发送短消息息给wayne 加好友    发送短消息息给wayne 发消息
发表于: IP:您无权察看 2015-7-10 9:37:00 | [全部帖] [楼主帖] 楼主

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参数都可以获取。

--转自 北京联动北方科技有限公司

该贴由koei123转至本版2015-7-14 11:05:51



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论