struts中的result有哪些常用的类型:
一、 dispatcher

1)为缺省的result类型,一般情况下我们在l会这么写:
<result name="success">/main.jsp</result>

以上写法使用了两个默认,其完整的写法为:
# <result name="success" type="dispatcher">
# <param name="location">/maini.jsp</param>
# </result>

第一个默认:type="dispatcher";第二个默认:设置的为location参数,location只能是页面,不能是另一个action(可用type="chain"解决)。

2)实现方式


doExecute方法看出,有三个出口(finalLocation为要跳转的地址):

pageContext.include(finalLocation);

dispatcher.forward(request, response); (dispatcher是根据finalLocation创建的)

dispatcher.include(request, response);

而我们知道,forwardinclude都是转发到context内部的资源。

二、redirect

1)可以重定向到一个页面,另一个action或一个网址。
# <result name="success" type="redirect">aaa.jsp</result>
# <result name="success" type="redirect">bbb.action</result>
# <result name="success" type="redirect">www.baidu</result>

2)实现方式:

查看doExecute方法,只有一个出口:

response.sendRedirect(finalLocation);

sendRedirect是重定向,是重新产生一个HTTP请求到服务器,故重定向后其原来所在的action上下文就不可用了。

三、chain

1)主要用于把相关的几个action连接起来,共同完成一个功能。
# <action name="step1" class="test.Step1Action">
# <result name="success" type="chain">step2.action</result>
# </action>
#
# <action name="step2" class="test.Step2Action">
# <result name="success">finish.jsp</result>
# </action>

2)实现方式:

查看execute()方法,主要思想如下:

// 根据Action名称getattribute方法返回类型finalActionName及要调用的方法finalMethodNamenew一个代理对象proxy,并执行之
# proxy = ateActionProxy(finalNamespace,
# finalActionName, finalMethodName, extraContext);
# ute();

3)多个action间数据的传递

主要有两种方式:

1。由于处于chain中的action属于同一个http请求,共享一个ActionContext,故可以在上下文中获取,在页面上可以直接使用。手动获取的方法如下:
# HttpServletRequest request = Request();
# String s=(Attribute("propName");

2。实现ModelDriven接口

Step1Action中,加入getModel
# public Object getModel() {
# return message;
# }

Step2Action中,加入setModel:
# public void setModel(Object o){
# System.out.println("message is:"+o);
# }

注意,setModel的调用先于execute()方法后于构造方法。
redirect redirectAction的区别
struts2中关于result的返回类型一般我们是转发到一个jsp页面或者是html页面等,但是struts2中的result的返回类型还有redirect,redirectAction,chain。对于这三种返回类型之间肯定是有区别的,下面我们来看看关于redirect redirectAction chain这三种struts2的返回类型之间的区别。
二、 当使用type“redirectAction” type“redirect”提交到一个action并且需要传递一个参数时。这里是有区别的:?
使用type“redirectAction”时,结果就只能写Action的配置名,不能带有后缀:“.action”?
<action name="Login" class="steven.actions.LoginAction">?
<result name="success" type="redirectAction">User?u_id=${loginBean.u_id}</result>?
</action>
三、
<action name="Login" class="steven.actions.LoginAction">
<result name="success" type="redirectAction">User?u_id=${loginBean.u_id}</result>
</action>
四、 使用type“redirect”时,结果应是action配置名+后缀名?
<action name="Login" class="steven.actions.LoginAction">?
<result name="success" type="redirect">User.action?u_id=${loginBean.u_id}</result>?
</action>
五、 1 redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。
2 redirect-action:action处理完后重定向到一个action,请求参数全部丢失,action处理结果也全部丢失。
3 chain:action处理完后转发到一个action,请求参数全部丢失,action处理结果不会丢失。
六、
使用type“redirect”时,结果应是action配置名+后缀名?