Struts2系列之配置处理结果

1.理解处理结果

1.1:浏览器、控制器和视图资源的顺序图

Struts2系列之配置处理结果

2.配置结果

2.1:局部结果

            将<result.../>作为<action.../>元素的子元素配置,一个<action.../>元素可以有多个<result.../>子元素,表示一个Action可以对应多个结果

2.2:Struts2支持的结果类型

             Struts2支持多种视图技术,例如JSP、Velocity和FreeMarker等。而结果类型决定了Action处理结束后,下一步将调用哪种视图资源来呈现处理结果
      Struts2默认提供了一系列的结果类型,由struts-default-xml配置文件进行配置;struts-default.xml文件保存在struts2-core-2.3.16.3.jar文件的根路径下。

2.3:简要介绍其中三种结果类型

2.3.1:palinText结果类型

         主要用于显示实际视图资源的源代码:

      <result type="palinText”>

          <!--指定实际的视图资源-->

          <param type="location">/WEB-INF/*,jsp</param>

          <!--指定使用指定的字符集来处理页面代码-->

          <param name="charSet">GBK</param>    

      </result>

2.3.2:redirect结果类型

    将请求redirect(重定向)到指定的视图资源:系统将调用HttpServletResponse的sendRedirect(String)方法来重定向指定视图资源

     使用redirect类型的结果时,不能重定向到/WEB-INF/路径下任何资源,因为重定向相当于重新发送请求,而Web应用的/WEB-INF/路径下资源是受保护资源

2.3.3:redirectAction结果类型

              这种结果类型与redirect类型非常相似,一样是重新生成一个全新的请求。但redirectAction使用ActionMapperFactory提供的ActionMapper来重定向请求

     当需要让一个Action处理结束后,直接将请求重定向到另一个Action时,就应该使用这种结果类型

     <result type="redirectAction">

         <!--指定重定向的actionName-->

         <param name="actionName"></param>

         <!--指定重定向的Action所在的命名空间-->

         <param name="nameSpace"></param>

     </result>

     比较:redirect通常用于生成一个对具体资源的请求,而redirectAction通常用于生成对另一个Action的请求

2.4:动态结果

     是指在指定实际视图资源时使用了表达式语法,通过这种语法可以允许Action处理完用户请求后,动态转入实际的视图资源;也可以使用OGNL表达式,这种用法允许根据Action属性值来

2.5:Action属性值决定物理视图资源

          配置<result.../>元素时,不仅可以使用${0}表达式来指定视图资源,还可以使用${属性名}的方法来指定视图资源;${属性名}里的属性名就是对应Action是实例里的属性。不仅允许使用这种简单的表达式,而且还可以使用完全的OGNL表达式,即使用这种形式:${属性名.属性名.属性名...}

2.6:全局结果

     当在<global-result.../>元素中配置<result.../>元素时,该<result.../>元素配置了一个全局结果,全局结果将对所有的Action有效

2.7:使用PreRestultListener

           PreResultListener是一个监听器接口,它可以在Action完成控制处理之后,系统转入实际的物理视图之间被回调。

   Struts2应用可由Action、拦截器添加PreResultListener监听器,添加PreResultListener监听器通过ActionInvocation的addPreResultListener()方法完成。一旦为Action添加了PreResultListener监听器,该监听器就可以在应用转入实际物理视图之前回调该监听器的beforeResult()方法:一旦为拦截器添加了PreResultListener监听器,该监听器会对该拦截器所拦截的所有Action都起作用