Struts2学习笔记(5)-处理结果及结果类型详解

来源:互联网 发布:阿里云手机空间 编辑:程序博客网 时间:2024/06/04 18:27

一、Struts2处理流程

  用户请求->Struts2框架->控制器(Action)->Struts2框架->视图资源  Struts1处理后会返回ActionForward;  Struts2处理后会返回字符串,这样的设计提高了代码的复用性,有利于框架分离。

二、处理结果

每个动作方法都会返回一个String类型的值,Struts2根据这个值决定接下来执行什么结果。每个动作声明都必须包含有数量足够的result元素——每个result元素分别对应着动作方法的返回值;
处理结果通常在struts.xml文件中使用标签配置。
标签有以下属性:
name:结果的名字,它必须与动作方法的返回值想匹配。此属性可选,默认值是“success”;
type:结果类型。默认值是“dispatcher”,其含义是把控制权转交给某个JSP页面。
此两个属性的默认值有助于我们编写出更加短小精悍的配置代码来。

根绝处理结果位置的不同,分为两种结果:

局部结果:将作为元素的子元素配置,还有子标签

 <default-action-ref name="CatchALL" /> <action name="CatchALL">   <result type="httpheader">     <param name="status">404</param>   </result> </action>

default-action-ref元素用来定义默认的动作,如果某个URI没有与之匹配的动作,这个默认的动作将被调用。上述代码定义了一个名为CatchAll的默认动作,它使用HttpHeader结果类型把一个“404”状态代码发送给浏览器。这么做的效果是:如果没有匹配到动作,用户将收到一个“404”状态报告,他将看到一个来自Web容器的默认页面,而不是看到Struts2的出错信息。
5. Redirect

这种结果类型将把用户重定向到另一个资源,而不是把控制权转交给该资源。这种结果类型接收下面这些参数:
location:用来给出重定向的目的地。
parse:用来表明是否要把location参数的值视为一个OGNL表达式类解释。parse参数的默认值是true。
使用重定向而不转交控制权的主要理由是为了把用户定向到一个外部资源。在需要把用户定向到一个内部资源的时候,使用Dispatcher结果类型的做法更好,因为这么做的速度会更快一些。重定向到内部资源时候,必须给出该资源的URI,这个URI可以指向一个动作。
在Struts2内部,Redirect结果类型由一个名为HttpServletResponse.sendRedirect的类负责处理,而后果之一是刚才执行的动作将被“遗忘”而不可能被再次执行。如果你需要在“目的地”页面或动作里用到“出发点”动作的状态,可以通过一些会话级或是请求级的参数来传递那些数据。

示例如下:

    <action name="RedirectTest" class="app03a.TestUser">      <result type="redirect">         User_input.action?userName=${userName}      </result>    </action>

这个例子,RedirectTest动作将重定向到User_input动作并把TestUser动作类的userName属性的值通过一个名为userName的请求参数传递过去。
注意:需要对“&”和“+”之类的特殊字符进行编码。重定向目的地时候需要把当中的特殊字改为转义序列。eg:“&”改为&
6. Redirect Action

这种结果类型与Redirect结果类型的行为很相似,但Redirect
Action不是重定向到另一个资源,而是重定向到另一个动作。Redirect Action结果类型可以有以下几个参数:
actionName:用来指定“目的地”动作的名字。它是Redirect Action结果类型的默认属性。
namespace:用来指定“目的地”动作的命名空间。如果没有给出namespace参数,Struts2将假设“目的地”动作和“出发点”动作处于同一个命名空间里。
注意:该结果类型重定向的目的地肯定是一个动作,所以你用不着像使用Redirect结果类型那样必须写出“目的地”动作名的.action后缀。

  1. Stream

    这种结果类型不会把控制权转交给一个JSP页面,它将向浏览器发送一个输出流。

  2. Velocity

    这种结果类型将把控制权转交给一个Velocity模板。

  3. XSLT

    这种结果类型使用XML/XSLT作为其视图技术。

  4. PlainText

    PlainText结果类型通常被用来发送JSP页面的源代码。