|
该用户从未签到
|
1. Action组件
0 c0 n# _% a, P' R+ t: K* X. x9 {1) 每次请求struts2会创建一个Action对象,不需要线程安全
. C \, E# v/ p& @7 |0 O! C. y2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶. N. @ k( S! E( E
可以通过OGNL表达式对当前的Action对象的属性进行访问
% C, m9 [- K% ^. S2 j: `+ k3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出, H+ ~& ^8 A9 {2 f$ m- O
Action的执行方法:调用业务层,根据输入计算输出4 ~, L3 U! e/ p9 [% k. u
: n$ L& e; W' I1 o6 Q
2. Action的配置
7 x" M' ^7 g4 ~9 H1) 基本配置
- }" N: I, R4 m( q8 d% f<action name="" class="" method="">* e, Z' U+ Q p1 b: u
</action>; A/ {% c/ R7 ^4 q( ?8 M$ m
2) method默认为execute; class默认为ActionSupport% j. _% k% T- r/ {7 z( `
可以更改class的默认值:
6 }1 J% b* n3 X# t- _( U V <default-class-ref class="com.tarena.tts.action.BaseAction" />
3 J9 R; H {, L+ R/ K" v5 \2 p! \3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
* f& n; W: t& L( j9 E( l3 Q 这样可以控制Action的粒度
* j5 Y3 f0 h6 m2 j1 @<action name="action1" class="com.tarena.tts.action.FooAction"
' _# I3 S# d) p/ D' q2 L4 @ method="one">, y; u# G' u W4 e1 y# c
</action>3 N. ^" e3 e4 Q/ q1 U
<action name="action2" class="com.tarena.tts.action.FooAction"
/ j+ P8 |/ w: Y" n method="two">& L& s! W2 C9 x
</action>: [, b* k4 z& e: Z# B, S
4) Action的配置name属性可以使用通配符: "*"
6 Z& Y9 h+ x$ n) f( v/ n, e<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
4 r3 S3 Z0 l: u( D$ e <result name="success">/WEB-INF/jsp/{3}.jsp</result>8 n# T2 }+ R7 i1 P$ ~! x( u
</action>
: B0 k2 s- r' d/ B3 `, V3 T$ C3 F, I% w& g. k% @/ O$ ^' @+ I/ ^# {
5) Action可以被注入属性/ H0 V9 ^! y$ D7 _& S; W
<action name="goo" class="com.tarena.tts.action.GooAction">3 \( X- W8 H6 a3 A- I9 m
<param name="number">120</param>- e6 N5 r8 x# ? j1 J* O
</action>: L# Y' ^9 t+ T2 x$ C/ Y7 c
1 o b/ _& p$ K; ~! M7 F9 \) J
6) 可以修改默认的后缀, l5 w5 | w1 \ R3 C: U: W
<constant name="struts.action.extension" value="action" />- k1 U3 {. u. i
; j8 Z# R! m( P0 r6 p2 A3. Action中如何访问Servlet API' K# l2 N, @3 f* q6 t; H2 s
1)
, x- a T J5 |( o1 \HttpServletRequest request = ServletActionContext.getRequest();
2 Z G, y6 p3 V( ]% u1 Q9 QHttpServletResponse response = ServletActionContext.getResponse();% [# v5 N/ F- b% ~. p
ServletContext application = ServletActionContext.getServletContext();, ~$ a- J& m) Z' v5 s3 \9 w% r5 v
2) I2 Z( n' J9 b% Z/ N7 L( F7 N
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
- x; q5 o% _; ^1 ~9 g相应的方法,通过参数传递需要的对象(request,response,appliaction...)% U: a6 X! K7 t' q7 ~
Action只需要在该方法中持有该对象,例如:. G" z" E1 p, x# G& f( _( `
public class BaseAction implements ServletRequestAware { S7 D) I6 r$ w4 N
protected HttpServletRequest request;
( m7 ~! c P$ B) \) R- U 3 | g$ R# n) g8 }; P0 o. Y
/**4 z5 _$ @" \- ?# i5 O
* Struts2会调用该方法,传递request对象
2 s! O3 Z, v z" I# }0 |3 n */$ \3 T J0 N* T1 x' P% Z$ P
public void setServletRequest(HttpServletRequest request) {9 j% {& _+ L- F- ^
this.request = request;
: C2 C5 h- q* J/ r8 ] }( j' k# g* h W7 Z9 O
}
" q$ T& K2 P3 }9 p3 d% Z }- [6 }- J+ E& Q Z
4. Result组件基础! S1 R6 D4 h9 M
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户6 c G$ B/ J: p( k' ^8 i* p( |
不同的的Result针对不同的数据格式: Q/ ~" P8 p9 g: G/ \$ \7 e
如果需要特殊的数据格式,可以自定义Result
: j& Y& B- t! d2 M- o* n1 p2 Nstruts2-json-plugin-2.1.8.1.jar, Y1 S. K8 P$ J: [
7 g' f8 `( I) E% l$ A& \( B
. j2 o7 I! z2 F! d |
|