我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > struts2 Action组件如何配置
总共48087条微博

动态微博

查看: 2010|回复: 0

struts2 Action组件如何配置

[复制链接]

326

主题

72

听众

999

金钱

实习版主

该用户从未签到

优秀版主

跳转到指定楼层
楼主
发表于 2014-05-19 21:20:43 |只看该作者 |倒序浏览
1. Action组件  e6 R, q; K# Z! t% b
1) 每次请求struts2会创建一个Action对象,不需要线程安全  I8 n/ H5 P- p+ Z2 C# E+ b8 K1 G+ N
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
( E+ E$ i3 j2 G% y4 U  可以通过OGNL表达式对当前的Action对象的属性进行访问, H$ C. u6 y7 A7 Q9 p3 q' d. l4 U
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出$ I6 M' D. w& C6 a$ y" H
   Action的执行方法:调用业务层,根据输入计算输出. c: C- U" s* W0 O
; F: h3 z3 V1 V
2. Action的配置. L7 E, ^1 b" R( A0 }/ |; U
1) 基本配置
6 \+ E7 I" ?, B! V( N0 U) T7 Z<action name="" class="" method="">% o2 \/ Z/ [1 n) b" R" X/ I  J
</action>
3 {, d1 a5 J! C* F( d2) method默认为execute; class默认为ActionSupport# |" ^5 f8 @) e* w% g
   可以更改class的默认值:: d& u# o! [3 W) G5 x0 q5 v
   <default-class-ref class="com.tarena.tts.action.BaseAction" />
$ T: `8 W  P1 o8 q/ E3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
7 R$ ]8 x+ f! i' J! Z, k. w   这样可以控制Action的粒度
4 v% ~* j9 d7 V. v, [0 K0 B<action name="action1" class="com.tarena.tts.action.FooAction"
, {- }, _5 U: ~) ^% f, B1 o                        method="one">4 A$ g$ L& F4 [, ?
</action>
; ]. H. b: B5 |, ?# \& x: ]# ?9 \<action name="action2" class="com.tarena.tts.action.FooAction". k0 f! j  K4 ^7 J% U" L9 P+ E
                        method="two">: W' h1 Y( X8 Y% n5 a+ Y
</action>
4 u# H' }: x. G2 k  _4) Action的配置name属性可以使用通配符: "*"
' s6 y' k5 W4 q<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">3 F2 g' `. T9 J/ k+ ?! m
   <result name="success">/WEB-INF/jsp/{3}.jsp</result>: x2 d3 ?) o: u. X+ u& N; s- o7 R
</action>$ G5 a+ p' U3 I; R* X; ?, A

' s7 b5 v& r3 e/ F8 B# M5) Action可以被注入属性% Q" }9 f6 N9 W9 @/ _6 R
<action name="goo" class="com.tarena.tts.action.GooAction">
5 I8 u( ^) q* }0 ~) m$ _- _( S        <param name="number">120</param>
1 I5 V+ p: |3 H* V</action>
% M. `& l' W0 h% @3 U
# X$ K% l. D! z& Z% A6) 可以修改默认的后缀
/ Q& }6 i# h) z<constant name="struts.action.extension" value="action" />" K+ b0 W/ K$ I  H0 M

  j9 j- O( |- U7 }3. Action中如何访问Servlet API
( ~: w% D; T5 I- A1)
7 H4 ~$ ]3 U" h: C$ V) o2 B$ V- _2 \/ p. uHttpServletRequest request = ServletActionContext.getRequest();+ i, k1 ?0 D- {) }% x1 ?6 y/ k) H+ l
HttpServletResponse response = ServletActionContext.getResponse();
3 f( K. e# p3 ^- q5 q  dServletContext application = ServletActionContext.getServletContext();+ ?0 j( J: Q+ W: L6 I) `0 o5 e
2)
% _+ a3 [" O- e2 U7 j% T( ?: h/ _Action实现了Aware接口,Struts2在初始化Action对象的时候会调用: K6 g+ s% _; z2 E: V" }
相应的方法,通过参数传递需要的对象(request,response,appliaction...)% c  O$ S9 D$ T( U9 J4 C
Action只需要在该方法中持有该对象,例如:3 h6 D' x: K/ M4 }
public class BaseAction implements ServletRequestAware {
, x8 A/ T2 w3 z. a  y+ Z* [        protected HttpServletRequest request;) \1 Y9 ]/ Z% d  }$ z
         / u4 [5 R/ U) w6 E* U$ g$ o/ s( V: u. Z) M
        /**$ W0 }+ E6 \: W1 o5 s* i
        * Struts2会调用该方法,传递request对象' P0 h" ?$ `6 [/ }0 b6 _- p5 d
        */
3 e' L/ I; Z& v. z7 d. F2 u        public void setServletRequest(HttpServletRequest request) {
2 c' C, }5 a* v                this.request = request;
* E/ J, o5 K, \! o! I( r4 S- M        }7 x; T7 r# k' x1 B1 I1 e3 Z% t7 n. Z
}
' c3 b- a, ]8 b5 k+ E; l) W* R5 y& f/ V7 B& t# D
4. Result组件基础
8 Y4 U  Y$ V# s* \) vResult组件负责将当前ValueStack中的数据以适当的格式输出给用户
& a3 X1 G+ c$ m/ ~不同的的Result针对不同的数据格式
( O3 j+ {" o' W% L+ `如果需要特殊的数据格式,可以自定义Result
6 s6 e/ R2 @& x% B% f8 Ystruts2-json-plugin-2.1.8.1.jar
, L! }# }9 ~0 s# }8 [! z. V9 h  T$ t( [. U& ]( n5 Q

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


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

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

   

关闭

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

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