科帮网

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > struts2 有哪些 跳转类型 chain、dispatcher、redirect
总共48087条微博

动态微博

查看: 2456|回复: 0

struts2 有哪些 跳转类型 chain、dispatcher、redirect

[复制链接]

279

主题

41

听众

689

金钱

版主

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-04-21 20:18:53 |只看该作者 |倒序浏览
struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action); l8 t5 ~4 B8 C6 ?
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/ Q
redirect-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>

  I6 a' w" q$ j) `6 @$ c4 e1 G( x5 K! q. E9 ~$ a! L# I. g

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

本帖被以下淘专辑推荐:

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表