dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp) O0 K v) y8 B# [: x9 }5 B" l
Xml代码 :
<result name="success">/main.jsp</result> 1 [4 H! _8 {$ v
以上写法使用了默认,其完整的写法为:
9 P/ a; O; k8 V5 ~) l<result name="success" type="dispatcher"> % n/ o2 |7 I4 I5 m
<param name="location">/maini.jsp</param> * p! V2 I! A2 L5 l3 @" U0 q
</result>
用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。
) L# O2 Z/ f; M2 r( Q1 ` O) q) Elocation只能是页面,不能是另一个action(可用type="chain"解决)。
: k0 \/ ]4 T+ m. S& m; B6 ^redirect 类型用于重定向到一个页面,另一个action或一个网址。
, y" j9 N% `3 ]- [2 V# s/ lXml代码:
<result name="success" type="redirect">aaa.jsp</result> 6 I. i/ W% o0 B4 x# F+ U0 ?
<result name="success" type="redirect">bbb.action</result> % j3 b+ r7 T! Z6 x: H& V
<result name="success" type="redirect">www.52itstyle.com</result> 缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。& _( ?0 A) v* V9 x/ ^/ Q. U
所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。
处理方法:
(方法一): / ^2 q5 ^: V6 F! P2 M
<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result>
9 a& c' F$ f3 G(方法二): : Y: k. U0 |2 N. i9 B
<result name="topic" type="redirect-action"> : ?9 u$ B7 A9 ~
<param name="actionName">findTopics</param>
" ]* p# U' B' |<param name="topicId">${topicId}</param>
8 X" B1 B$ @! G8 R2 _</result>
U- Q4 [% {. Wredirect-action 结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action 2 Q7 n7 R1 X0 V1 I
Xml代码:
<result name="err" type="redirect-action">
) @9 p# d! ?; k) J; O3 ]& | <param name="actionName">重定向的Action名</param> 7 G; G, {5 M. F& h5 E/ g% e( \
<param name="namespace">重定向Action所在的名字空间</param>
8 k5 X+ j4 p" g8 u5 f</result> ( d, u5 P1 G1 ?" l- U! l0 Y
redirect和redirect-action两种结果类型在使用上其实并没有什么区别,只是写法不同而已。
) ]6 s# J$ _( Ychain 用于把相关的几个action连接起来,共同完成一个功能。 + b% B1 {+ H/ |1 t9 j$ B
Xml代码:
<action name="step1" class="test.Step1Action">
# [2 I5 Q+ g7 L: N <result name="success" type="chain">step2.action</result> ; I# n! k2 g' j& q
</action> 0 K3 O) I9 W7 U/ S0 x& w
<action name="step2" class="test.Step2Action"> 3 D8 t8 Y5 w) q
<result name="success">finish.jsp</result> 4 P$ z5 a: E2 s5 b9 E* d
</action> # H1 h8 ]; o! @# C) _3 _2 @" `
处于chain中的action属于同一个http请求,共享一个ActionContext
5 V$ K2 A* j7 ^, p
! ^/ q$ x7 i# N
plaintextj 结果类型用于直接在页面上显示源代码
Xml代码:
<result name="err" type="plaintext"> % \- u* @; C& I1 [3 q
<param name="location">具体的位置</param> e- O2 h6 v# i& Q3 }; V8 F
<param name="charSet">字符规范(如GBK)</param> . B7 w. W/ `' |
</result>