http://blog.csdn.net/zrzlxln/archive/2009/04/17/4087993.aspx
最近一直在学习WebWork,学习了result类型之后,对dispatcher和redirect做个比较。
1.讲讲它们各自的工作原理
重定向的工作原理:通过在HTTP头把一个302的HTTP返回码和新的位置一并发送至浏览器,然后浏览器将自动发出一个指向这个新位置的HTTP请求。
dispatcher result的工作原理:它发出一个内部的对资源的请求,只通过一个请求为浏览器生成最终的视图。
2.通过一个购买在线书籍的例子进行说明,这一区别相当重要。
假设有以下配置(dispatcher result):
<action name=“checkoutorder” class="org.eliot.CheckoutOrder">
<result name="success">order-confirmation.jsp</result>
</action>
这个时候用户单击了结账的按钮---链接至/checkoutorder.action----账单被处理并且显示一个确认的页面。这意味着如果用户单击了浏览器的刷新按钮,账单将会再次被结付----这并不是用户最期待的结果。
接下来,看看另外一个配置(redirect):
<action name=“checkoutorder” class="org.eliot.CheckoutOrder">
<result name="success" type="redirect">order-confirmation.jsp</result>
</action>
使用以上这个配置,当用户结账的时候,浏览器最终的位置将会是order-confirmation.jsp。这意味着重新装载该页面并不会导致结账的动作再次被触动,但是,order-confirmation.jsp页面得不到action类中包含的数据。
为了解决上述这两个问题:防止表单重复提交和在redirect下得到action类中包含的数据。提出下面两个方案(最后一个方案比较推荐)
方案一:对配置做如下改动:
<action name=“checkoutorder” class="org.eliot.CheckoutOrder">
<result name="success" type="redirect">order-confirmation.jsp?confirmationNumber= ${confirmationNumber}</result>
</action>
方案二:重定向至另一个action,具体配置如下:
<action name=“checkoutorder” class="org.eliot.CheckoutOrder">
<result name="success" type="redirect">confirmation.action?confirmationNumber= ${confirmationNumber}</result>
</action>
<action name="confirmation" class="org.eliot.Confirmation">
<result name="success">order-confimation.jsp</result>
</action>
这个配置完全解决了表单重复提交。这是因为confirmation action只是一个简单的的读取动作的action。同时也得到了action中包含的数据。该解决技巧极力推荐。
分享到:
相关推荐
webwork in action 中文版
WebWork_Result的配置文件详细分解,看了这个你再也不用发愁result的事了
该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 部署说明 … 如果...
Web层:WebWork 中间层:Spring IoC 持久层:Hibernate, 需求分析: 用户在注册页面,填写注册信息,确认有效注册成为新用户 用户在登录页面,填写用户名和密码,确认正确后进入系统 用户可以在登录之后,浏览图书分类列表...
Web层:WebWork 中间层:Spring IoC 持久层:Hibernate, 需求分析: 用户在注册页面,填写注册信息,确认有效注册成为新用户 用户在登录页面,填写用户名和密码,确认正确后进入系统 用户可以在登录之后,浏览图书分类列表...
WEBWORK的配置
Struts 2 技术详解:基于WebWork核心的MVC开发与实践
详细的介绍了webwork的使用机制和标签的归类使用
这是webwork1的jar包,还有webwork-2.2.7.jar和webwork-src-2.2.7.jar
webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程
WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包
webwork源码下载
webwork底层源码,用于webwork框架设计
webwork中文帮助文档 webwork中文帮助文档 webwork中文帮助文档 webwork中文帮助文档 webwork中文帮助文档 webwork中文帮助文档
webWork中文教程
webwork_框架文档
包括webwork2.x的 具体使用步骤,见解压后“webwork使用步骤.txt” 和一个实现前后台连通的webwork具体应用的“test” 实例,将test导入eclipse的工作空间,即可正常运行
webwork2.1.7
与下载的<<WebWork docs -- webWork 详细的说明文档>> 的文件夹合并. 这里包括了所有webWork的所有的详细说明文档, 任何有关的问题都可以在这里找到答案.
webWork 详细的说明文档, 由于我的上传大小有限, 这个好东西我只能是分两次上传了, 下载的人可能要辛苦一些了, 不过这些都是值得的, 将<<WebWork docs 2 -- webWork 详细的说明文档>> 也一同下载下来, 下载后两个...