该用户从未签到
|
1. Action组件
8 ?, A; P- o' u. P1) 每次请求struts2会创建一个Action对象,不需要线程安全
8 `" ]) R( ?/ `: G2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶4 ]( o0 u. P/ R5 x" f* R1 a
可以通过OGNL表达式对当前的Action对象的属性进行访问9 N- P9 a6 B" w1 _
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
0 W% l0 N8 d, K, x* b Action的执行方法:调用业务层,根据输入计算输出
# S) e# a, u* l6 X0 u
0 e2 D, b9 o' j/ x' _- U2. Action的配置, H9 E1 J6 E) \
1) 基本配置 ) m0 j0 D, U1 S- y% S" k+ J
<action name="" class="" method="">3 |! i6 q- x; m; x# R
</action>
% o( ~$ H. P) J c2) method默认为execute; class默认为ActionSupport
/ d( f" y- h/ A+ G# x 可以更改class的默认值:
|9 j# e3 B! _" y- _ <default-class-ref class="com.tarena.tts.action.BaseAction" />
8 O& V$ T0 ~+ Y- q; L3) 可以实现多个Action配置共用一个Action类,但调用不同的方法% L% S& B( r" {# ^
这样可以控制Action的粒度
) M h; S( h9 I; U0 B: y<action name="action1" class="com.tarena.tts.action.FooAction"
4 Z* s0 J" f# t3 [$ d5 Z method="one">
& M: k1 `) F2 f8 T# _4 o+ m G1 |</action>
2 C: l4 o9 P! X: d! G$ h<action name="action2" class="com.tarena.tts.action.FooAction"0 o8 s2 a3 a3 r( f; X! ^0 s
method="two">
) H7 ~ v, c/ g" ]( }</action>5 x5 y- Z- H) {7 B4 |7 {
4) Action的配置name属性可以使用通配符: "*"5 o3 U d: y. E
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
3 j7 B: r b5 q$ h g3 l <result name="success">/WEB-INF/jsp/{3}.jsp</result>
: ]6 o) R4 {0 s1 ]# D</action> M6 g! l, S5 X% y4 m
8 J5 r, C! h5 N2 f: y! j
5) Action可以被注入属性2 h" n" c% M1 D$ M) n* {/ Z2 G
<action name="goo" class="com.tarena.tts.action.GooAction">9 I) n, m" k8 P! d
<param name="number">120</param>: e8 p4 U* n/ J6 r
</action>
& C' M9 n3 f4 }/ @" d2 o( _5 T1 |+ g% r* D3 Q- o7 f8 w
6) 可以修改默认的后缀
/ z0 h1 R( ?+ N5 h7 i5 C<constant name="struts.action.extension" value="action" />
; Z+ {: T. V# t/ \7 w& J2 I1 @4 N- q$ P$ V! M: F1 j. n' K
3. Action中如何访问Servlet API- T: Y9 h0 {$ L, o
1) 8 q: @. g7 v. Z6 d; M
HttpServletRequest request = ServletActionContext.getRequest();
' ]- h! s3 N5 ^HttpServletResponse response = ServletActionContext.getResponse();
& P/ H7 M* R% i( w# B% b2 w) a; o" xServletContext application = ServletActionContext.getServletContext(); D% D# |, c1 _3 @
2)
' k) M4 W0 k7 iAction实现了Aware接口,Struts2在初始化Action对象的时候会调用
6 E0 Q8 s! ]1 q8 C相应的方法,通过参数传递需要的对象(request,response,appliaction...)
5 R. {' m4 w ^) p7 ZAction只需要在该方法中持有该对象,例如:
. J4 ?5 |( C- g, y9 U) x& upublic class BaseAction implements ServletRequestAware {
+ E( P3 v) C6 i4 @3 |* | protected HttpServletRequest request;1 x; C0 O0 V1 n; @6 r/ c' A% O- k
- w) G* W- x+ G2 R8 J /**
; D) ]3 {1 J7 U; V l d- K * Struts2会调用该方法,传递request对象
$ Q" r, ~% S/ E4 ]/ T */% V" ~2 r% a2 ` E
public void setServletRequest(HttpServletRequest request) {8 C3 a, f. t6 N0 u8 e5 M
this.request = request;
. X% ?- {# Z1 L$ [" k" \6 d }
9 i, j/ C0 o2 {, O}
* R% l' L4 B" T8 `+ M! Q( |2 V# k/ G( o* a3 Q) r
4. Result组件基础, P% U; l" \7 M8 _ p2 W, j
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户7 B4 S$ R& I3 p4 G! L" Q) L6 X
不同的的Result针对不同的数据格式
( W# f) h. B- o& v如果需要特殊的数据格式,可以自定义Result
& z% @% t" L+ A$ A& X, J8 _struts2-json-plugin-2.1.8.1.jar
/ U% O7 z$ Z6 D8 A
6 z3 l( _3 _# Z0 y1 S0 U" q1 p2 {3 w, X) |& j% a& J$ o
|
|