|
该用户从未签到
|
1. Action组件
* u/ a1 e d5 B, b- W1) 每次请求struts2会创建一个Action对象,不需要线程安全
. A$ e% u7 k a2 I7 a2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
! |/ l$ w) t: @$ v; A 可以通过OGNL表达式对当前的Action对象的属性进行访问! V/ I3 V3 @8 [8 A! g& G% w( J; L$ e2 v
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
3 l, D0 L! h0 t7 t6 u' H Action的执行方法:调用业务层,根据输入计算输出( _; H4 F0 P% e" H9 b2 L
1 M- P( n7 h4 T, L- D1 f+ N
2. Action的配置
' u9 J7 K$ \2 _% K1) 基本配置 $ X, M* J& T2 P; F& w
<action name="" class="" method="">
" r2 \+ y1 d+ ~6 w- J</action>
) V% Z g. A U/ n* ? k0 F/ q3 b2) method默认为execute; class默认为ActionSupport8 f: h) ?4 f3 X
可以更改class的默认值:
4 G& B- I! E. }5 E! g <default-class-ref class="com.tarena.tts.action.BaseAction" />
+ o, q) P, M7 @( z }* t3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
) K1 L+ H0 S6 c+ c* M! `- o f 这样可以控制Action的粒度% ~" x$ X6 `, H1 q6 M) x
<action name="action1" class="com.tarena.tts.action.FooAction"( ^7 p) W$ _3 \- g( z
method="one">, ]0 ~" ^6 _0 U( r
</action>
( p3 u7 p. ~1 I$ @& @1 D( D<action name="action2" class="com.tarena.tts.action.FooAction"
. @5 h j- A. q& C& r8 s. G method="two">
" {' U- _4 L% a" R: U</action>2 D! r; A8 o, l3 b4 h3 v
4) Action的配置name属性可以使用通配符: "*"7 z# g& w* B5 B2 u7 k( ^
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">) M5 \6 b6 d- @' [8 U8 _% L
<result name="success">/WEB-INF/jsp/{3}.jsp</result>
~) q0 N7 ], c2 E+ w/ e/ Z</action>
0 ^( u9 Z. g8 Y. ~8 O, ^
3 b6 q- I; s# w1 Z" V9 ^3 P5) Action可以被注入属性2 b' E, j0 t# D3 `3 o+ R7 d
<action name="goo" class="com.tarena.tts.action.GooAction">
7 x) ^+ ]+ ?2 q4 K <param name="number">120</param> g" Z) P% k) L1 C( _
</action>! Z q# }- y% L& L- h2 ~' V
0 K, K( Z. g- Z6 ]" `2 b& C% ?
6) 可以修改默认的后缀2 h7 w/ |; A+ E5 P0 U
<constant name="struts.action.extension" value="action" />% M ?9 M( o! }; Q- Q3 @
3 v, _9 ^" j. N5 e
3. Action中如何访问Servlet API
% A0 T1 S- `6 A6 F, l1)
; x3 o: C, _3 I+ Q m9 p/ iHttpServletRequest request = ServletActionContext.getRequest();
7 M: z( k3 \2 nHttpServletResponse response = ServletActionContext.getResponse();. d$ ]+ W! b! {' \3 {" {
ServletContext application = ServletActionContext.getServletContext();
9 z' |% s5 d8 ?) w# ]2)4 _2 J$ N1 x0 Y; p
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用" G5 F; r9 z+ ^8 a4 h6 n7 a
相应的方法,通过参数传递需要的对象(request,response,appliaction...)3 R2 d# Y7 r; q9 V$ C# u/ g7 r8 P
Action只需要在该方法中持有该对象,例如:
. d. X% R Y. P1 S1 Q- Q% E( Tpublic class BaseAction implements ServletRequestAware {
! B) b* `) w& u protected HttpServletRequest request;
8 s j3 T* }2 p. R* u9 L * d$ h$ p4 {" |& x7 x8 q
/**! e; F9 e6 y( p U' H& T, Z
* Struts2会调用该方法,传递request对象
. J( R1 l* S; {) n */
& o; }- }+ M! w+ x8 d$ M" [# B public void setServletRequest(HttpServletRequest request) {9 {1 V, X3 U4 _$ j
this.request = request;
, f. p$ r6 r5 I. T5 n/ u3 ?- n }
0 Q" I, b) N. c, U: q1 D" O}/ q8 H. D& |$ w$ z
5 g% O2 G( u: j( a6 R- Y4. Result组件基础. m& ^6 ~6 b' D
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户1 |8 |. @+ X' Z% a1 }
不同的的Result针对不同的数据格式
4 S1 |8 [- X9 b7 @ ^如果需要特殊的数据格式,可以自定义Result
3 \: a% f# y3 n- J0 s& O! v8 k' Dstruts2-json-plugin-2.1.8.1.jar- W8 w9 B0 [/ x7 k K
4 B0 V# J; \6 ^4 ^7 q E |
|