一、结果集介绍
Struts2的Action处理用户请求结束后,返回一个普通字符串——逻辑视图名,必须在struts.xml文件中完成逻辑视图和物理视图资源的映射,才可以让系统转到实际的视图资源。
简单的说,结果是告诉struts2框架,当Action处理结果时,系统下一步做什么。当Action返回一个普通字符串时,系统下一步将做什么。
Struts2中支持局部结果和全局结果。
这些由局部结果和全局结果构成的结果,我们称为结果集。
(1)局部结果
将<result…/>作为<action…/>元素的子元素配置。一个<action…/>元素可以有多个<result…/>元素,这表示一个Action可以对应多个结果。例如:
<action name="*">
<result name="success" type="dispatcher">
<param name="location">/login.jsp</param>
</result>
</action>
其中,type属性指定结果类型为dispatcher。
<param name="location">/login.jsp</param>为该逻辑视图指定实际的视图资源。
(2)全局结果
将<result…/>作为<global-result…/>元素的子元素配置。例如:
<global-results>
<result name="error">/error.jsp</result>
</global-results>
二、Struts2支持的结果类型
(1)struts2支持的结果类型
Struts2内建支持的结果类型有:
(1)chain
用来处理Action链,Action链式处理的结果类型。
将action的带着原来的状态请求转发到新的action,两个action共享一个ActionContext,actionName指定转向的新的Action的名字,method指定转向哪个方法,namespace指定新的Action的名称空间,不写表示与原Action在相同的名称空间。
(2)dispatcher
请求转发,底层调用RequestDispatcher的forward() 方法,dispatcher是result的type属性默认值,通常用于转向一个JSP。
Dispatcher类型是最常用的结果类型,也是struts框架默认的结果类型。
(3)freemarker
处理FreeMarker模板。
用freemaker模板引擎呈现视图,location指定模板(*.ftl)的位置,parse如果为false,location的值不会被OGNL解析,contentType指定以何中类型解析,默认为text/html。
(4)httpheader
控制特殊HTTP行为的结果类型。
(5)redirect
重定向到一个URL。
新页面无法显示Action中的数据,因为底层调用response.sendRedirect(“”)方法,无法共享请求范围内的数据。
(6)redirectAction
重定向到一个Action。
参数与chain用法相同,允许将原Action中的属性指定新名称带入新Action中,可以在Result标签中添加 <param name=”b”>${a} </param>,这表示原Action中的变量a的值被转给b,下一个Action可以在值栈中使用b来操作。
(7)stream
向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据。
(8)velocity
处理Velocity模板。
(9)xslt
处理XML/XLST模板。
(10)plainText
显示原始文件内容,例如文件源代码。
(2)struts2常用的结果类型
struts2常用的结果类型有:chain、dispatcher、redirectAction、freemarker。
三、知识扩展
(1)如何查看Struts2支持哪些结果类型?
在\Web App Libraries\struts2-core-2.3..8.jar\struts-default.xml中可以找到定义,如下所示:
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>