dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp)
9 ~7 r) Q5 G0 `8 @Xml代码 :
<result name="success">/main.jsp</result> / y; X0 _5 b" k* i+ F
以上写法使用了默认,其完整的写法为:
% ^( s% y3 T4 ~9 D<result name="success" type="dispatcher"> * E8 V" y& o- c
<param name="location">/maini.jsp</param> 3 c7 t. c- W) x3 Z% ^
</result>
用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。
1 }5 M1 Z ]% f7 W! ]+ X" nlocation只能是页面,不能是另一个action(可用type="chain"解决)。
. p, |9 D8 O4 n( o# y3 h# d
redirect 类型用于重定向到一个页面,另一个action或一个网址。 6 K; ?3 e" S: i
Xml代码:
<result name="success" type="redirect">aaa.jsp</result>
* V, v& d/ N" [; q+ u<result name="success" type="redirect">bbb.action</result> ! Q6 X" M# s2 x! i. Y1 P4 r& y5 K
<result name="success" type="redirect">www.52itstyle.com</result> 缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。
: X7 z! h: e% S所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。
处理方法:
(方法一):
* r3 O/ N$ L5 Z% l6 U<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result>
) U& L, t$ Z# v& D(方法二):
! _3 m' `* W5 M: ^3 O1 d. W; C; f. ^. R<result name="topic" type="redirect-action"> # K6 c& l7 A' F8 @: B
<param name="actionName">findTopics</param> 6 A% f+ B) K9 G% q1 B1 }, G
<param name="topicId">${topicId}</param>
$ [6 j S2 G1 w' w$ \+ w5 c</result>
2 M2 m- [) _7 k1 C) y/ Qredirect-action 结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action 3 x6 Y6 U9 e9 I8 a! j. C' @/ B
Xml代码:
<result name="err" type="redirect-action"> # h9 {2 _2 |* W/ I
<param name="actionName">重定向的Action名</param> ) I% f' v* ~( o& E+ K& Y
<param name="namespace">重定向Action所在的名字空间</param>
% D8 s+ L! q, l# d</result>
7 O# g. p0 G' b0 c1 @% tredirect和redirect-action两种结果类型在使用上其实并没有什么区别,只是写法不同而已。
( l+ U' q7 \8 _. [& N) y" ]5 }1 R1 F( y
chain 用于把相关的几个action连接起来,共同完成一个功能。
+ Q6 a, |; `2 }, B. X8 ^! ?Xml代码:
<action name="step1" class="test.Step1Action"> 4 m1 J( T$ S6 V# `" ^4 D9 {
<result name="success" type="chain">step2.action</result> 9 `7 ~" b K! B! ]5 F, w5 [% g
</action> ( y9 t2 P. l* f) L- G, P4 U( r
<action name="step2" class="test.Step2Action">
: ]' j: D1 E; K) [! L: \# @<result name="success">finish.jsp</result>
Y* J& S' o3 Y( E+ \8 a. I</action>
( }/ E! C# r6 y5 I处于chain中的action属于同一个http请求,共享一个ActionContext
8 j) A% @( }0 a: s
- T" t) i; ?! W: O8 V
plaintextj 结果类型用于直接在页面上显示源代码
Xml代码:
<result name="err" type="plaintext">
1 \! J5 G5 h. y3 i$ ]: ] <param name="location">具体的位置</param>
- k& t1 N8 s' w" y) H1 D <param name="charSet">字符规范(如GBK)</param>
3 z, ?7 B g% W1 E* W/ Z1 N2 s</result>