dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp)
7 d: }0 _& Q. J7 ~Xml代码 :
<result name="success">/main.jsp</result> / x2 X6 w8 N' E
以上写法使用了默认,其完整的写法为:
" C) f; g3 D4 W$ y, D, m) m<result name="success" type="dispatcher">
8 V2 L' u4 d) q# N <param name="location">/maini.jsp</param> 1 M& _9 s: Y* c; a
</result>
用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。
0 M. t4 u* P! x2 j# l" D+ ylocation只能是页面,不能是另一个action(可用type="chain"解决)。
) h! W, ~5 K$ s0 j( `) h( n2 f
redirect 类型用于重定向到一个页面,另一个action或一个网址。 6 l+ V( l g' {2 K
Xml代码:
<result name="success" type="redirect">aaa.jsp</result>
& Q' f s4 p& z7 \<result name="success" type="redirect">bbb.action</result> " |& _( A# ?7 @' Q& X6 G- o
<result name="success" type="redirect">www.52itstyle.com</result> 缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。, R: z+ S) `& Y/ G& b2 x; T
所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。
处理方法:
(方法一):
* c$ f y% h. T6 }<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result>
' i* g4 c9 [1 z( N(方法二):
* e* A) w; W7 G h( w9 P" d6 P<result name="topic" type="redirect-action">
& W" u! G1 |7 A# t3 q- ~* @<param name="actionName">findTopics</param>
8 V1 n0 X' f0 k" J2 B1 k3 s# A<param name="topicId">${topicId}</param> 4 G2 p% P: v* ]
</result>
3 R! u# L) f U0 M; e: q; kredirect-action 结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action ! l5 X% u3 R' W+ F4 {/ x. k
Xml代码:
<result name="err" type="redirect-action">
# M4 ~3 ]% V) V- K* f <param name="actionName">重定向的Action名</param> ( Z9 ~4 w) \' J& D! k% y- B# ]$ V
<param name="namespace">重定向Action所在的名字空间</param> , d- B: @1 O3 O7 y
</result>
/ c; ]: _+ I2 m5 ~2 k b' t9 v9 }redirect和redirect-action两种结果类型在使用上其实并没有什么区别,只是写法不同而已。
+ m* p. C( m- w1 A8 k
chain 用于把相关的几个action连接起来,共同完成一个功能。 & t& H2 V% |0 `; d! w( l4 q, f
Xml代码:
<action name="step1" class="test.Step1Action">
' l; L6 B9 j" E1 h) r' z. b P <result name="success" type="chain">step2.action</result> ) p$ |+ G, N6 V# ]. ]5 {% c/ z. U
</action>
; l2 e. [ s+ k4 g1 x8 w" q<action name="step2" class="test.Step2Action"> ' T. u% J7 N3 X
<result name="success">finish.jsp</result>
/ o h1 p% e" M- N4 \3 Q</action>
' \1 }1 V1 V4 b: T处于chain中的action属于同一个http请求,共享一个ActionContext ' J3 D4 ^. k- w6 n, n
1 L8 e/ R9 Z6 ^ H1 r2 c, r. m) }; ^
plaintextj 结果类型用于直接在页面上显示源代码
Xml代码:
<result name="err" type="plaintext">
* S% F9 g* M# [/ f7 D <param name="location">具体的位置</param> ) f+ I l4 v. E) `3 z
<param name="charSet">字符规范(如GBK)</param> 7 Y0 Y9 R$ E& A( e
</result>