Struts2配置返回结果
Struts2的Action在处理用户请求结束后,会返回一个普通的字符串,这个字符串其实是一个逻辑视图名,必须在struts.xml文件完成逻辑视图和物理视图资源的映射,才能让系统转到实际的视图资源。
配置过程如下:
首先,新建一个测试用的Action类,让其继承ActionSupport,ActionSupport类里实现了Action接口,里面封装了很多已经实现了的方法,Action接口里面定义的public static final String SUCCESS = "success",也可以直接拿来用。
package com.bran.e_result;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport{
@Override
public String execute() throws Exception {
System.out.println("------TestAction---------");
return SUCCESS;
}
}
接着,在struts.xml配置文件里面配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="result" namespace="/" extends="struts-default">
<action name="TestAction"
class="com.bran.e_result.TestAction" method="execute">
<result name="success" type="dispatcher">/result.jsp</result>
</action>
</package>
</struts>
主要是采用<result .../>元素来配置结果,一个<action ...>...</action>元素可以有多个<result .../>子元素,这也表示一个Action可以对应多个结果。
配置<result .../>元素通常需要指定两个元素:
name :该属性指定所配置的逻辑视图名,就是上面Action中方法的返回值,默认值为success。
type:该属性指定的结果类型,默认是dispatcher转发到jsp的结果类型。
上面这段配置可以这么理解,当我们通过浏览器访问这个TestAction的时候,就会调用TestAction中的execute方法,这个方法会返回一个逻辑视图名success,接着再根据<result .../>元素中对逻辑视图名success的配置,就会转发到result.jsp这个页面。
由于,<action ...>...</action>元素中的method属性在不指明的情况下,默认是execute,<result .../>元素的name属性在不指明的情况下默认是success,type属性在不指明的情况下,默认是dispatcher
所以,上面这种配置也可以简化成下面
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="result" namespace="/" extends="struts-default">
<action name="TestAction"
class="com.bran.e_result.TestAction">
<result>/result.jsp</result>
</action>
</package>
</struts>
Struts2支持的结果类型
由上面可以知道,<result .../>元素里面的type属性是用来配置结果类型的,默认情况下是dispatcher,这是指定使用jsp作为视图的结果类型,除了jsp以外,Struts2还支持Velocity和FreeMarker结果类型等。Struts2内建还支持的结果类型如下:
- chain Action链式处理结果类型,相当于可以转发到其他的Action
- dispatcher 用于指定使用jsp作为视图结果,转发到jsp页面
- freemarker 用于指定使用freemarker模板作为视图的结果类型
- httpheader 用于控制特殊的HTTP行为的结果类型
- redirect 重定向类型,可以跳转到其他URL
- redirectAction 重定向到其他Action
- stream 用于向浏览器返回一个InputStream(一般用于文件下载)
- velocity 用于指定使用Velocity模板作为视图的结果类型
- xslt 用于与XML/XSLT整合的结果类型
- plainText 用于显示整个页面的原始代码的结果类型
在不加入其他Struts2插件的情况下,Struts2默认支持的结果类型就这么多了,比较常用的结果类型就有chain、dispatcher、redirect和redirectAction这四种,这四种结果类型在struts.xml的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="result" namespace="/" extends="struts-default">
<!-- 转发到result.jsp-->
<action name="DispatcherAction"
class="com.bran.e_result.DispatcherAction" method="execute">
<result name="success" type="dispatcher">/result.jsp</result>
</action>
<!-- 重定向到result.jsp -->
<action name="RedirectAction"
class="com.bran.e_result.RedirectAction" method="execute">
<result name="success" type="redirect">/result.jsp</result>
</action>
<!-- 转发到Action -->
<action name="ChainAction"
class="com.bran.e_result.ChainAction" method="execute">
<result name="success" type="chain">
<!-- Action的名字 -->
<param name="actionName">DispatcherAction</param>
<!-- Action所在的命名空间 -->
<param name="namespace">/</param>
</result>
</action>
<!-- 重定向到Action -->
<action name="RedirectAction2"
class="com.bran.e_result.RedirectAction2" method="execute">
<result name="success" type="redirectAction">
<!-- Action的名字 -->
<param name="actionName">DispatcherAction</param>
<!-- Action所在的命名空间 -->
<param name="namespace">/</param>
</result>
</action>
</package>
</struts>