该用户从未签到
|
1. Action组件9 G% U9 T7 [! k" L0 Q3 t
1) 每次请求struts2会创建一个Action对象,不需要线程安全
* l( \% B. h# }& M( z) N2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
" p5 p; l2 P% ^0 l3 Q5 d 可以通过OGNL表达式对当前的Action对象的属性进行访问% r4 |9 Y% b8 T7 c4 n* U
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出- z. c5 n1 }/ a2 v* M4 i
Action的执行方法:调用业务层,根据输入计算输出2 g6 l i/ D2 ]) F" B
& l9 X0 I% V {, S3 Y: N% q/ c- N2 X
2. Action的配置
# F" c) @5 v; _+ V o! S1) 基本配置
+ k$ V( n i# {. C$ U* A- \<action name="" class="" method="">* u. W. J7 P( r( K. f
</action>. \6 v5 q1 E6 S" @/ z
2) method默认为execute; class默认为ActionSupport7 d* [( B2 t. U/ p# E3 x ]) G
可以更改class的默认值:
2 t" f1 S/ h6 O7 j7 X <default-class-ref class="com.tarena.tts.action.BaseAction" />
* z, q7 ] N: o3) 可以实现多个Action配置共用一个Action类,但调用不同的方法6 @% f* V1 L; J4 t: L
这样可以控制Action的粒度
5 U$ M% S x3 @% U8 Z Y<action name="action1" class="com.tarena.tts.action.FooAction"
! I/ J4 U5 Z& E; x1 M9 G4 \ method="one">
4 Z0 f t( h! o</action># J) `3 ^8 i, E( R
<action name="action2" class="com.tarena.tts.action.FooAction"
, c0 L% @7 Q) s3 _0 B! ~ method="two">" ]2 ^) H/ v* o( @/ e
</action>5 `: E' s9 ~9 D* P/ x
4) Action的配置name属性可以使用通配符: "*"$ u# Q4 s2 P3 [0 q2 u' W% n
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">3 G/ n) `: c0 r4 }/ t
<result name="success">/WEB-INF/jsp/{3}.jsp</result>6 f' o S* w* n; X/ d! c
</action>
$ o$ _$ k1 R4 V. O7 H- | P! r
6 U" K, `$ _0 g! H0 {5) Action可以被注入属性. C7 y" r' O5 t4 S _) M
<action name="goo" class="com.tarena.tts.action.GooAction">
( ]% v* H7 {5 z3 u; } <param name="number">120</param>
* G3 C1 } j; `9 W& D</action>' f( H! _. Y8 G1 X* S) `7 i- }% z
, q3 G* c6 e/ h8 o' l- D# A6) 可以修改默认的后缀" k2 k. _! N& x2 W7 v$ i; e+ h
<constant name="struts.action.extension" value="action" />
% y ]6 P) p( I* V; d3 u; h
/ m' t! H. ] R# U0 {3. Action中如何访问Servlet API& e9 k+ p9 Z, [3 V/ b2 l0 c& X
1)
' H5 x& l V- |0 h$ b3 `* NHttpServletRequest request = ServletActionContext.getRequest();5 @. X4 n$ h/ c6 K* P& E) F6 `
HttpServletResponse response = ServletActionContext.getResponse();
9 w% a8 R4 V* {. Y+ i8 {1 H" Q: lServletContext application = ServletActionContext.getServletContext();4 V9 z& W/ p4 @0 Q& S6 g+ C
2)5 w; `- M& B( k. A4 i8 |
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
! N5 V/ [2 I, Q, o% }* ?, l; g相应的方法,通过参数传递需要的对象(request,response,appliaction...)
. x7 n3 L' H2 k# K$ p9 lAction只需要在该方法中持有该对象,例如:' \+ V' ^. ]( |3 i! B6 R* ]$ O
public class BaseAction implements ServletRequestAware {
: w7 q6 L% t/ T protected HttpServletRequest request;, o. t3 |9 e9 w4 F; P. Z
1 Y) P/ m T3 o# r( U
/**
+ [. S, F, w. n2 n n * Struts2会调用该方法,传递request对象' R! r' J* h9 Q- w5 }( B
*/) J0 O: z3 ]/ O5 P O9 e
public void setServletRequest(HttpServletRequest request) {4 p6 L1 X1 C- f, X9 Y4 o
this.request = request;
2 u3 r8 Z' w% v o' | }/ l+ c; s- F9 u) ^3 Z
}
0 h( V" Q x5 q ~1 v
0 j" ]2 t) ]) i8 s2 [! C+ [4. Result组件基础: D( A. [6 q0 Q! e/ V
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户
0 j3 G, Z+ e$ V* X, F不同的的Result针对不同的数据格式' ]* t- t4 L9 n* \7 y4 f
如果需要特殊的数据格式,可以自定义Result( G$ T1 X. ~7 k q
struts2-json-plugin-2.1.8.1.jar& F, H- C: t& [1 ]. ^. E
% G$ f, J F1 B
|
|