`

WebWork Result Type :dispatcher和redirect的区别

    博客分类:
  • J2EE
阅读更多
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_Result

    本文详细介绍了WebWork框架中`WebWork_Result`配置文件的使用方法,重点讲解了`dispatcher`和`redirect`两种类型的`result`配置及其区别。通过这些知识点的学习,可以帮助开发者更好地掌握WebWork框架的核心机制,...

    webwork配置详解

    常见的Result Type包括"success"、"error"和"redirect"等,它们对应不同的视图处理策略。 总结来说,WebWork 配置涉及Action的创建、ActionContext的理解和使用、ServletDispatcher的调度机制,以及Action的测试和...

    webwork2个人学习总结

    Webwork2是一个基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序开发中提供了一种组织和管理代码的方式。以下是对Webwork2框架的学习总结: 1. **JAR包下载与项目配置**: - 开始学习Webwork2时,首先需要...

    WebWork In Action

    - **结果类型**:介绍各种结果类型(如dispatcher、redirect、chain等),并说明它们的作用场景。 - **结果配置**:演示如何在配置文件中定义不同的结果。 #### 8. 表达式语言获取数据 - **表达式语言**:解释...

    webwork学习笔记

    - **示例**: “dispatcher”、“redirect”、“stream”等。 - **OGNL**: - **定义**: Object Graph Navigation Language,用于获取或设置对象属性的强大表达式语言。 - **应用场景**: - 访问对象属性。 - 执行...

    xwork配置内容详细讲解

    &lt;result name="input" type="dispatcher"&gt;/name.jsp&lt;/result&gt; ``` 在这个例子中,“login”是动作的名称,“com.action.Search”是指向实现该动作的具体 Java 类。`&lt;result&gt;` 元素则定义了不同的执行结果以及对应...

    Struts 2权威指南--基于WebWork核心的MVC开发

    Struts 2支持多种类型的结果,如`dispatcher`(用于渲染JSP)、`redirect`和`stream`(用于下载文件)等。 4. **配置**:Struts 2的配置分为XML配置和注解配置两种方式。XML配置通常在`struts.xml`文件中进行,包括...

    Struts2.0

    5. **结果类型(Result Types)**:Struts2支持多种结果类型,如dispatcher(用于转发到JSP页面)、stream(用于下载文件)和redirect(用于重定向URL)。 6. **插件架构**:Struts2的插件架构使得扩展和集成其他...

    Struts 2.1权威指南基于WebWork核心的MVC开发源代码

    Struts 2.1还支持多种结果类型(Result Types),如dispatcher(用于转发到JSP页面)、stream(用于处理大文件下载)和redirect(用于重定向)。此外,它还提供了丰富的插件体系,可以轻松集成其他框架如Spring、...

    开发框架struts2.1.8.zip

    例如,`dispatcher`结果类型默认使用Servlet容器的请求Dispatcher将结果转发到视图,而`redirect`或`redirectAction`则重定向到一个新的URL。 在安全方面,Struts 2.1.8可能会修复了一些已知的安全漏洞,如著名的...

    java必备知识点大全.pdf

    Struts2中result中的type类型:Struts2中result可以是 dispatcher、chain、redirect、redirectAction等类型。 Struts2标签:Struts2提供自定义的标签来简化JSP页面的开发。 SSI整合:SSI即Server Side Include,...

    struts2学习总结

    - `chain`:调用另一个 Action,并可以传递参数,例如 `&lt;result type="chain"&gt;login_add?uid=${uid}&lt;/result&gt;`。 - **字符编码问题**:处理中文时需要注意编码问题,例如对 URL 参数进行编码: - 发送请求时需要...

    Struts 2权威指南配套源码-第8至12章

    同时,会介绍不同类型的Result,如dispatcher(转发)、stream(流式结果)和redirect(重定向),并学习如何根据需要选择合适的结果类型。 第10章:Struts 2的拦截器 Struts 2的拦截器是其强大功能的关键,它们...

    struts2.3.32 api

    6. **结果类型(Result Type)**:Struts 2支持多种结果类型,如dispatcher(转发)、stream(流式结果)和redirect(重定向),可以根据不同的需求选择合适的结果类型。 7. **表达式语言(OGNL)**:OGNL是Struts ...

    Struts2讲义1

    常见的结果类型有:dispatcher(默认,使用Servlet的forward机制),stream(用于处理大文件下载或流媒体),redirect(HTTP重定向)等。结果可以通过配置或注解指定。 此外,Struts2提供了OGNL(Object-Graph ...

    struts2 的简介

    常见的结果类型有`dispatcher`(转发)、`redirect`(重定向)等。 #### 输入校验与异常处理 - **输入校验**:为了确保数据的准确性和安全性,Struts2提供了强大的输入校验功能。你可以通过覆盖`ActionSupport`中...

    java 框架总结

    &lt;result name="login"&gt;/WEB-INF/jsp/user/userlist.jsp&lt;/result&gt; ``` - **动态方法调用**:支持在URL中直接调用Action中的方法,例如`login!logout.action`。 - **结果类型**: - **Dispatcher**:请求转发...

    J2EE课堂小测试_答案

    Struts2支持五种结果类型:chain、dispatcher、freemarker、jsf、redirect、plainText。 全局结果和局部结果: Struts2通过在struts.xml中配置逻辑视图名和物理视图名称的映射关系,来自动将对应的物理视图呈现给...

    Struts2 权威指南 (代码)

    Struts2支持多种Result类型,如`dispatcher`(用于转发到JSP页面)、`redirect`(重定向到新的URL)等。 3. **Interceptor**:拦截器是Struts2的一大特色,它允许在Action调用前后插入自定义逻辑。例如,可以创建...

    strut2 开发入门程序

    常见的Result类型有dispatcher(转发到JSP页面),stream(输出流,如文件下载),redirect(重定向)等。 6. **拦截器(Interceptor)**: 拦截器是Struts2的一个强大特性,它们可以拦截Action的执行过程,实现如...

Global site tag (gtag.js) - Google Analytics