该用户从未签到
|
1. Action组件
+ `- Y5 q3 r1 z: p6 Q1) 每次请求struts2会创建一个Action对象,不需要线程安全3 X* ~; E Y' B
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
9 z) g. G* B9 r 可以通过OGNL表达式对当前的Action对象的属性进行访问& o& I, T4 G' h# z8 @
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
/ a" M. q L! B" O# m' w+ E0 g Action的执行方法:调用业务层,根据输入计算输出7 a g% v- B5 K
, S4 U2 N) u9 l1 v' H# e2 l( u2. Action的配置; ^4 m9 s; v) V0 a2 O. Z" ~' S+ ^
1) 基本配置 3 O. s [) b, M% ~! G3 t$ z9 a. m
<action name="" class="" method="">, S3 E& J$ P0 H; \4 W* B
</action>
( Q- U8 X" ]) A" X7 t2) method默认为execute; class默认为ActionSupport5 l1 t: O7 G# P9 d0 F& f/ i2 ]( |
可以更改class的默认值: ^1 b: M P: `) C
<default-class-ref class="com.tarena.tts.action.BaseAction" />2 i+ U. e% H t K/ n% u) n% T0 U
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
$ | v v2 }7 Q& x) k 这样可以控制Action的粒度: [1 B1 M8 `- Q# _
<action name="action1" class="com.tarena.tts.action.FooAction"
8 U* F- J# f# }' L- Y6 Z method="one">+ C3 `$ d) S) h; x; Z+ v: K
</action>
* a& N$ I9 a( K: T! ^; C<action name="action2" class="com.tarena.tts.action.FooAction"
* D( j6 o/ f8 y; h$ N' P3 Q0 X method="two">& B# i9 f7 x! N. s3 t1 A
</action>9 I V8 f: [" @# T: i
4) Action的配置name属性可以使用通配符: "*": X" P' W: ~" K6 J/ Z$ z( {
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
. { t0 a0 A5 Y' D9 l7 M& J <result name="success">/WEB-INF/jsp/{3}.jsp</result>( d! v" Y% \, E2 s7 \" y1 Y
</action>' \. b9 Z! a: Y7 k; \# V
: E: s, _2 l7 d
5) Action可以被注入属性
' m8 @9 {# ?' }, b* E1 L7 h- W<action name="goo" class="com.tarena.tts.action.GooAction">
( }; X+ v/ Z3 h <param name="number">120</param>
% ] }5 v8 n5 V2 I5 Y0 [</action>$ K- j( U* v$ I8 P
1 ~! ]5 d. r$ q( {
6) 可以修改默认的后缀
4 N$ e( c0 ?' z( h. W/ [- p<constant name="struts.action.extension" value="action" />
# \1 J* A" }" k3 G. w+ G/ @" p0 \( _7 M& H- T& W
3. Action中如何访问Servlet API
6 w0 Y1 N' A& f. C/ X: F. N" F1)
9 i1 {- s: v w B$ R PHttpServletRequest request = ServletActionContext.getRequest();
5 K" N) u, G8 s" }6 ?& y$ KHttpServletResponse response = ServletActionContext.getResponse();- N$ S5 q, O8 M% `
ServletContext application = ServletActionContext.getServletContext();* O Z3 n5 l* r* ?+ J
2)
% s# X7 O9 J' M' i6 h4 XAction实现了Aware接口,Struts2在初始化Action对象的时候会调用
2 z( l# d8 r k$ H2 J相应的方法,通过参数传递需要的对象(request,response,appliaction...)0 J. T% b2 r' E! r+ f/ ?
Action只需要在该方法中持有该对象,例如:
" }8 L- y% e1 S. ^' E* Npublic class BaseAction implements ServletRequestAware {
& c0 [; k5 w- m/ a2 a* l1 ]& s protected HttpServletRequest request;; }& M' t- s* t+ o- ?
9 { c% ]1 f5 J' F5 [ /**- G$ j0 Y4 W: e$ F& z8 s* c
* Struts2会调用该方法,传递request对象
0 n$ u6 b% Z9 T R */# O+ m( n4 v$ M' Q3 |
public void setServletRequest(HttpServletRequest request) {
. F: u6 M) @8 E8 D this.request = request;
0 g9 ^" s% _& ` R }4 ]$ V1 e5 `" ? B0 v$ O
}/ U' Q3 [- w0 q2 Z+ g* l
1 S+ i" W% x- B: X4. Result组件基础& P* |/ r$ h0 ^, |0 t' |) W+ y) j
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户5 X! e9 q) y8 F( d
不同的的Result针对不同的数据格式0 L6 `# T& o1 E: H% f3 ] q
如果需要特殊的数据格式,可以自定义Result
) g4 P9 B. B4 Gstruts2-json-plugin-2.1.8.1.jar
. _, b V$ f; b1 Y$ r$ a) k8 t
( y, E9 u. ]6 s* O7 _% X& J( o" @$ I' ]. z1 ^5 ?
|
|