|
该用户从未签到
|
1. Action组件
/ `1 l. `* S) \/ _* Y$ {2 o0 x1) 每次请求struts2会创建一个Action对象,不需要线程安全) w) B. `" y$ |. O
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
9 r! L: \$ K& }- r# \, I 可以通过OGNL表达式对当前的Action对象的属性进行访问
* x' F- }$ |- k3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
7 T0 F( H" s3 V1 U5 M5 ~ Action的执行方法:调用业务层,根据输入计算输出. k8 X& i9 ?0 [- m/ ]7 P
* |6 x& C2 I% S- i
2. Action的配置
9 v/ [3 y* i, T: q1) 基本配置 0 ]; a3 b( x: L
<action name="" class="" method="">
1 o8 D- {' f1 L7 W5 y$ v</action>: d6 K. ]# t* B- y, H
2) method默认为execute; class默认为ActionSupport7 B) I6 Z, _6 W. P
可以更改class的默认值:
5 J" a! f2 ~7 R! [. ] <default-class-ref class="com.tarena.tts.action.BaseAction" />
) B( ` f/ x+ B4 s: L6 q3) 可以实现多个Action配置共用一个Action类,但调用不同的方法! Y+ b* A4 c3 b" B) ^% [: d
这样可以控制Action的粒度 V% U% p( h) I0 }' Q1 T2 l
<action name="action1" class="com.tarena.tts.action.FooAction"
) K# n2 ?9 C( d9 N& w3 f8 H1 n method="one">* L: h2 Q9 m( p- @5 ]
</action>. S9 P$ Z- C3 @
<action name="action2" class="com.tarena.tts.action.FooAction"3 B: r6 q; H% V1 n7 ?
method="two">
) M+ _. E; E+ M- U</action>( w q: A1 c0 Y) S7 ?/ x( S- q
4) Action的配置name属性可以使用通配符: "*"0 ]0 z4 v1 ^8 T0 Z; y- M0 g, K0 Z
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
8 I, C1 y8 F# j) b# \. N <result name="success">/WEB-INF/jsp/{3}.jsp</result>
) }' A D9 ?" Z( S</action>
7 s" C I7 J8 m7 g5 I+ \
- d8 M) N. ?7 N4 h4 M" s5) Action可以被注入属性4 H4 _3 S: ?+ F3 J* h& q5 J/ j
<action name="goo" class="com.tarena.tts.action.GooAction">
* q, h& U# l" z$ j' z <param name="number">120</param>
* k: F& U6 O, J0 x</action>4 b" y( x9 x: b5 |9 W
' P0 j2 x6 ?( P5 \6) 可以修改默认的后缀
! A! u, N: o& b; u<constant name="struts.action.extension" value="action" />' \9 R' e+ }" O6 s" j# W
7 e& H! y, X0 W# N$ O. n
3. Action中如何访问Servlet API: @& G% @" R; I& _
1) 8 z. V2 c3 S" U
HttpServletRequest request = ServletActionContext.getRequest();& g3 F# @; [4 ]' u
HttpServletResponse response = ServletActionContext.getResponse();
( q* o; g# N, jServletContext application = ServletActionContext.getServletContext();! K8 |1 P8 q% u
2)7 e1 x8 J3 G2 |
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用( w! W; G+ [* M
相应的方法,通过参数传递需要的对象(request,response,appliaction...)9 j' f; }2 M6 {$ ]
Action只需要在该方法中持有该对象,例如:7 {3 U# o! l! H* X8 ]: `
public class BaseAction implements ServletRequestAware {2 W0 f/ F: K! t( q
protected HttpServletRequest request;
& V2 |) c) u+ {" F9 G" o- ~
% Y) ?; x/ u" [: `5 ` /**
3 ^$ b. N- E- {0 [4 O * Struts2会调用该方法,传递request对象7 n. q3 v8 Q. N- E1 H4 P. i
*/
3 _6 H, X% h2 @# h public void setServletRequest(HttpServletRequest request) {
- E1 v/ n9 b$ d ?! M this.request = request;7 _6 U7 E+ x4 S
}
/ I# _: D. F$ h2 G}( P) j; ~# o/ Z- {* e0 b% |0 I$ `
/ z! N; }& |% U( W/ k* N4. Result组件基础5 Q$ i' g) R4 C) v' O2 c+ q
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户- X1 b7 W( r; ?! w! S, O4 b1 c
不同的的Result针对不同的数据格式
' }/ g, Q6 q8 O* b: R4 I. v+ `如果需要特殊的数据格式,可以自定义Result. ?( c& q$ d- K+ l
struts2-json-plugin-2.1.8.1.jar
! I! J. C Q6 ]4 B9 |5 z
' R+ G7 Y$ g# f" [0 @! W3 E" z6 e" M7 e) z v/ T$ C9 e1 X/ C3 v
|
|