dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp) 3 W3 u9 b- r6 ?- a | g- }* u% r
Xml代码 :
<result name="success">/main.jsp</result> 0 m# z: o+ N1 M6 F
以上写法使用了默认,其完整的写法为:
8 W7 d5 u8 ]/ L# J2 Y6 i<result name="success" type="dispatcher">
5 y$ o6 j1 T! v% W: J+ P6 v <param name="location">/maini.jsp</param>
+ `3 o ?" F5 R: A" I/ {6 C</result>
用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。
, i- @+ h4 z/ \- a3 s, k" elocation只能是页面,不能是另一个action(可用type="chain"解决)。
% g6 Q- {. R7 C Fredirect 类型用于重定向到一个页面,另一个action或一个网址。 2 T7 J0 E/ q, b$ i S+ x
Xml代码:
<result name="success" type="redirect">aaa.jsp</result> ) T& y- u+ U8 _
<result name="success" type="redirect">bbb.action</result>
# Z: s8 m% y2 m8 J, }: X6 K. s<result name="success" type="redirect">www.52itstyle.com</result> 缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。1 g, R" i# s* j4 f
所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。
处理方法:
(方法一): 8 F) p: ` ~2 U8 x# L4 O8 Y! H
<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result> * R1 N! @7 u; h& V& z- l
(方法二):
7 a$ |# Z: q1 f- U) N8 u<result name="topic" type="redirect-action"> ' e( Z- f' k5 T# f4 `7 \
<param name="actionName">findTopics</param> 0 d- L& E, U2 n5 H9 ^3 w, G
<param name="topicId">${topicId}</param>
) H5 H3 @" [( r</result>
L% q7 H5 N: d+ L Y
redirect-action 结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action ) _' u+ I7 @+ q3 l
Xml代码:
<result name="err" type="redirect-action"> 3 D3 w5 ?% m ~) J, Q8 l
<param name="actionName">重定向的Action名</param>
2 `! q+ s7 ~1 D9 u <param name="namespace">重定向Action所在的名字空间</param> 6 O7 q9 s- U7 `! o! [) w
</result>
! y' {; s. B' M# r4 f4 mredirect和redirect-action两种结果类型在使用上其实并没有什么区别,只是写法不同而已。
- |6 j( F* S- a0 F% H, H' gchain 用于把相关的几个action连接起来,共同完成一个功能。
# z4 M2 c% k6 R& t6 x# c) _: j. PXml代码:
<action name="step1" class="test.Step1Action"> " q5 O2 k0 m% ], u- S! p
<result name="success" type="chain">step2.action</result>
' @0 G$ N: }) L# |</action>
- {; t' ^; a3 X* K/ n+ A<action name="step2" class="test.Step2Action">
, [" U& g4 t$ g3 k: l<result name="success">finish.jsp</result>
9 [; M) n4 X; M</action> / K" n. q2 o- |: O( G5 ]
处于chain中的action属于同一个http请求,共享一个ActionContext
9 `6 z& L0 l- d) _; `& a
" ~- T7 Y5 \6 U) \5 ^8 h" e; g; E
plaintextj 结果类型用于直接在页面上显示源代码
Xml代码:
<result name="err" type="plaintext"> & ]- ~9 {) s7 R+ B9 _7 e: u
<param name="location">具体的位置</param>
0 n) G1 a: I7 [8 V8 m$ O" w <param name="charSet">字符规范(如GBK)</param> . X& v9 t' S, M; W
</result>