您的位置:首页 > 其它

forward与redirect的区别

2008-10-28 21:17 260 查看
forward标准动作:使用RequestDispatcher ,JSP的转发功能是在服务器本身上实现的

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

Redirect方式利用的是HTTP协议中的redirect机制,让客户端发起新的请求,到新的URI。初始的参数和request上下文都不在了。只有Action Forward路径中定义的参数。这种方式需要在struts配置文件中,将Forward元素的redirect属性设置为true。Http重定向:response.sendRedirect(myNewURL);
发送的请求信息又回送给客户机,让客户机再转发到另一个资源上,新的URL出现在Web浏览器中,需要在服务器和客户机之间增加一次通信。可以将重定向到任一的URL,而不是同一应用程序中的URL.但只是重定向的源组件和目标组件,是不共享request范围内的共享数据。浏览器会发出请求,访问重定向目标组件。只是访问。

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

文章出处:http://www.diybl.com/course/1_web/webjs/200824/99192.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: