|
该用户从未签到
|
1. Action组件3 V; S0 C. ^% q" ]( [& b. G! [
1) 每次请求struts2会创建一个Action对象,不需要线程安全
& \; Z1 ?* u, p2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
+ M" p. v2 ^* A4 ~1 R 可以通过OGNL表达式对当前的Action对象的属性进行访问# n" u1 S0 f: H
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
$ G0 e8 G; t# e8 B" F' J Action的执行方法:调用业务层,根据输入计算输出. R5 x) \- q4 s- u
; F2 ?; a$ O {- H
2. Action的配置
* V- q4 _+ A- A* f+ \! o8 l6 J6 V1) 基本配置 2 @7 W7 l+ S1 i8 A5 M# w: C
<action name="" class="" method="">
8 s+ Y w. b1 A1 b( s</action>
' ?5 d2 Y$ Z; g& ~6 t1 }( o& i0 W2) method默认为execute; class默认为ActionSupport
/ _! u/ ^2 b, R; f& u 可以更改class的默认值:
. F6 w- W: \& \) n' ?% y2 a* L8 e% l <default-class-ref class="com.tarena.tts.action.BaseAction" />& S1 s% f6 t, b
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法' i& r+ t: [8 y' U& x
这样可以控制Action的粒度
' |( V7 m7 T3 s+ o' P<action name="action1" class="com.tarena.tts.action.FooAction"5 y- h1 Y/ o5 S; i/ i7 |
method="one">( o4 k0 F' _/ U. S% q
</action>; U/ R4 |1 n6 W0 U, O. a& V
<action name="action2" class="com.tarena.tts.action.FooAction"; M; C, \0 R2 i! P
method="two">5 U, @) r* W+ b) ]! W. o
</action>7 ^: T3 u* u+ @# Y& x
4) Action的配置name属性可以使用通配符: "*" s" D4 Z0 c) R" r4 K3 W% J
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
5 T( J' n& L8 d. X: l <result name="success">/WEB-INF/jsp/{3}.jsp</result>
, e) i0 d) I- P0 f. N</action>& N( g3 |) A) N. \9 R
# F5 q" S# y7 x1 t- P l- V6 ?& z
5) Action可以被注入属性
7 Y- I$ {% C6 m9 C" }<action name="goo" class="com.tarena.tts.action.GooAction">
9 a, [* R* W7 ~- `& F+ p8 T <param name="number">120</param>3 ?5 K, @5 k- c9 c
</action>9 o# o2 `& z# K1 ?" q" p
' G+ `" q7 W& }# _3 x+ e! E
6) 可以修改默认的后缀2 P/ I# j# o: V# n2 K
<constant name="struts.action.extension" value="action" />& D. ]$ `# F6 Z, R; Q% I6 L
6 b$ Z& B2 S0 n/ ^3. Action中如何访问Servlet API
0 s4 l; R7 P$ D# ^9 G( [$ ? r1) ( H' j1 f! \$ [% e1 p: N
HttpServletRequest request = ServletActionContext.getRequest();
. N0 r/ _, y/ ^2 ~HttpServletResponse response = ServletActionContext.getResponse();
1 J& o0 I8 K/ h# X, K; CServletContext application = ServletActionContext.getServletContext();$ @3 W! ~" j4 Q9 G5 i" m
2)- W }6 {$ z: ~ L5 Z$ f4 ^. R
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
, H/ N2 a8 c4 X, V% A6 J0 k: N9 O相应的方法,通过参数传递需要的对象(request,response,appliaction...)
3 |; w' F1 n# \0 P) lAction只需要在该方法中持有该对象,例如:0 q6 M: S2 N5 [$ n% j* s, a
public class BaseAction implements ServletRequestAware {# w9 z7 k& Q7 R$ w0 r
protected HttpServletRequest request;4 Y: |5 V3 X; N
* U; Z- ~) ?* t$ W6 ^, R- z/ f
/**; f7 f# g6 b8 Z7 u: Y
* Struts2会调用该方法,传递request对象! j `! T- M: Y1 r
*/% @# b( y% X* ^. K! f" T4 k" G
public void setServletRequest(HttpServletRequest request) {% l, S9 f1 [# G8 ]
this.request = request;4 w7 ]7 C: J; a4 ^( Z6 _% Q
}# j U) h }( I. `
}
6 e9 m9 u' k1 ?5 O& U8 r0 @3 B, L3 `5 A+ U$ b0 |% P8 p, o6 ]
4. Result组件基础
- B( g/ o5 ]% T) ?Result组件负责将当前ValueStack中的数据以适当的格式输出给用户0 K9 p5 D/ b" I
不同的的Result针对不同的数据格式1 x" B2 P A" \, T0 R
如果需要特殊的数据格式,可以自定义Result2 j5 |: m( L2 E2 Z' I
struts2-json-plugin-2.1.8.1.jar/ I7 v e2 r3 i2 o( G3 [7 b
" b; E/ s W8 C* _ |
|