该用户从未签到
|
1. Action组件' g& m% ~# ^& C9 X
1) 每次请求struts2会创建一个Action对象,不需要线程安全# j3 M- J+ o* i" u
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶( o7 p/ ~- B9 ^7 z* y! ?) T$ w1 W
可以通过OGNL表达式对当前的Action对象的属性进行访问, { k8 @ {5 \
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出6 k2 C5 H: p1 K' q! }! u9 T7 ]
Action的执行方法:调用业务层,根据输入计算输出/ t9 x% h" Z( F$ I2 V4 H/ G
! L0 s; B: S6 g, Z: S
2. Action的配置/ n7 l7 U5 ?2 ~) ?* A( u+ @5 b
1) 基本配置 # U; ?1 s# K4 E: ?6 i
<action name="" class="" method="">+ T9 u% {' P9 R
</action>2 F& I/ |; l7 Y; @* I" {4 V, W5 I
2) method默认为execute; class默认为ActionSupport& \) R* h9 Q) @8 z- n) I7 `! P7 ^; V
可以更改class的默认值:
9 n# s, Y% `4 ^' L) O1 {$ Y <default-class-ref class="com.tarena.tts.action.BaseAction" />6 r# \- O! Q# S0 U2 ^( H) P
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法3 w: T1 a& a6 V2 `$ ]
这样可以控制Action的粒度 v, A% { g, }' W" m+ F
<action name="action1" class="com.tarena.tts.action.FooAction"1 h! h: t0 `8 f
method="one">
/ n# p. f/ @5 }. y. V</action>+ N7 @4 J B7 t' C' q+ n+ f s+ e/ t3 g
<action name="action2" class="com.tarena.tts.action.FooAction"
* T3 ]$ j3 P& T2 D method="two"> v7 h& F8 l! f: Y' ]# k
</action>
5 H3 V1 E3 i* s F& H1 W* h' k4) Action的配置name属性可以使用通配符: "*"
; d2 \% [7 j0 y* m<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">: H1 i) B. o3 ?- q) G7 P! v# }
<result name="success">/WEB-INF/jsp/{3}.jsp</result>
3 G( ?7 [% X$ L, s3 G</action>
7 b5 q% t! |* l: E5 r2 \
( G' y: x' ^3 s6 }- A5) Action可以被注入属性2 B9 P4 a, u6 H& S6 Z1 K* l! v
<action name="goo" class="com.tarena.tts.action.GooAction">
6 x1 {# p6 ?# R4 r+ t0 w <param name="number">120</param>% s7 ?0 J# Z8 ~) `& n/ p! E
</action>
0 }2 l ~" T; { G$ @
/ B$ Z$ B9 s9 M6) 可以修改默认的后缀
/ i" K" x* e' ~: n<constant name="struts.action.extension" value="action" />
. X+ g8 A3 R9 K. ~3 n4 y" V$ m" _
8 h8 h6 U, v: f3. Action中如何访问Servlet API
' W, |( @% r6 s& O7 _7 J1) 5 K5 A4 o& v% O. z8 A0 l9 F7 R
HttpServletRequest request = ServletActionContext.getRequest();
& u1 C# j' }" X- CHttpServletResponse response = ServletActionContext.getResponse();
% W% K% X( ]( ]! H% v* wServletContext application = ServletActionContext.getServletContext();
' w4 _, T$ G5 q6 A$ u$ f2)8 M# b$ Z0 S, s1 _7 X
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
7 k/ V) t" B) s2 V相应的方法,通过参数传递需要的对象(request,response,appliaction...)
|1 o" ^' o1 j& @Action只需要在该方法中持有该对象,例如:
% X2 i2 z5 U% o# K* |9 opublic class BaseAction implements ServletRequestAware {
* o( K5 b; o4 }. v7 b protected HttpServletRequest request;
, d8 z/ v; G. K" k 0 @; |" v, n; r3 p0 Z$ g
/**, f, c# r" m2 r# `* t5 w
* Struts2会调用该方法,传递request对象
( s5 a. X: J# _4 D0 P */% ?1 x$ k! W) R% J3 ?& d% ^
public void setServletRequest(HttpServletRequest request) {
8 w; e, Z1 B3 U# r this.request = request;/ p* i# A* `. v. e/ a& C% B
}
2 a# r7 N0 d5 \0 @5 _) a2 U}* x6 O4 s' q6 @% j( _4 v
) f6 n; j* m& C/ F* c
4. Result组件基础; J7 h1 {4 h. ]
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户
; M# s, k2 X! b6 l* h不同的的Result针对不同的数据格式5 s6 K! r( t0 V$ s$ \% l
如果需要特殊的数据格式,可以自定义Result/ ^% x0 m& Z9 ^9 {8 p7 b/ W
struts2-json-plugin-2.1.8.1.jar
; _* c/ A* n3 T- o+ C% v9 Z i0 N. y) _, C
! R7 H& O2 }. v: |. [; v. Y! r8 ~ |
|