该用户从未签到
|
1. Action组件
# c/ G: |8 K# I* J2 `3 l6 I1) 每次请求struts2会创建一个Action对象,不需要线程安全, O4 [! Q2 a# @# M. q& _
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
6 k% I: a u/ [, q* q. c8 X% N 可以通过OGNL表达式对当前的Action对象的属性进行访问
8 M4 f# W8 S" l+ o3 s3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
D! h; k. }2 K* x( V2 b' y Action的执行方法:调用业务层,根据输入计算输出% J0 M6 s0 o$ v4 B7 O* Z* e3 ?. W
9 {- Z1 O8 u: e ]6 o
2. Action的配置
- f. |7 c: k5 T$ I1) 基本配置 7 G+ R* z5 Y; M4 a1 r: q: i% Z
<action name="" class="" method="">: x1 w4 G/ U: U1 d1 s: {
</action>
* Q0 {9 M5 S: x+ t- e6 d2) method默认为execute; class默认为ActionSupport- _) x/ H& ?: J C1 R% n
可以更改class的默认值:+ a6 \& ?% M, X
<default-class-ref class="com.tarena.tts.action.BaseAction" />- W2 i0 E3 x7 o5 A' e5 g( k% W
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法9 j5 o5 C/ f; i2 t4 s
这样可以控制Action的粒度+ \" |7 d8 K& P& D
<action name="action1" class="com.tarena.tts.action.FooAction"
- o# q" T4 T0 z5 s9 @1 D. E" K method="one">
% x0 c! O# h2 T, S6 a8 J) j</action>: M4 `# h$ S% w4 S
<action name="action2" class="com.tarena.tts.action.FooAction"
1 W. ^8 I1 M1 V- Z5 z. I2 @ @ method="two">
% B' I5 D0 g* `4 D9 f$ k/ a. ?' K</action>' ?6 ^3 p7 M, x" Z9 @( V* g1 ~
4) Action的配置name属性可以使用通配符: "*"& o: J7 Y( p, {0 V
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">( Z6 B3 O3 w4 \, [: J* A/ P
<result name="success">/WEB-INF/jsp/{3}.jsp</result>7 k, H; h0 B! r4 @5 X' i7 O3 |
</action>
% x2 n6 F" r w# k# L0 u0 P5 b" u% b
5) Action可以被注入属性
. m8 O A1 Q# @; S<action name="goo" class="com.tarena.tts.action.GooAction">
3 W' }6 p; L& s9 T- U8 p! n <param name="number">120</param>! o* i( h6 {% g3 I4 Z
</action>9 S" M0 F$ T' d
) f) E7 p: d9 _1 K( g( R6) 可以修改默认的后缀
$ J; Z" _/ f& f; ^: H# n<constant name="struts.action.extension" value="action" />' V( j" ]" v! r* B9 M6 [( o
% S; H2 [0 a3 _8 k' M3. Action中如何访问Servlet API
. Y) `- t6 u0 O; v1)
W: ]$ D8 ^8 B" t. d8 j# iHttpServletRequest request = ServletActionContext.getRequest();5 E4 j; q. t! M6 b
HttpServletResponse response = ServletActionContext.getResponse();
4 M3 A1 m) [3 F% E- k& s! i% n3 E. tServletContext application = ServletActionContext.getServletContext();
8 e5 Q; o9 H5 N2)$ L7 L0 j0 s/ L! _; q0 |
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用& q j; V1 p4 h/ p0 p( F( u
相应的方法,通过参数传递需要的对象(request,response,appliaction...) C$ K9 N5 i' s# K' \8 W
Action只需要在该方法中持有该对象,例如:
3 {, |* _" I: T6 [$ A" Hpublic class BaseAction implements ServletRequestAware {
1 l3 J4 D, H: M6 ~9 [ protected HttpServletRequest request;
$ U. b4 e: v! I: Q 4 B2 ]1 t2 W3 d+ u1 n9 o. c
/**9 O; C: b2 c$ J! J1 N4 U
* Struts2会调用该方法,传递request对象
8 l5 S9 |- U5 p3 \% h7 r4 Z */1 H6 ~& b$ M' [+ a8 v
public void setServletRequest(HttpServletRequest request) {
2 R" Q- ]% o/ k* t# v# a# G5 n this.request = request;7 s0 Y) H `" o2 u8 c7 U& X
}
7 _/ b; M4 }: L9 ^0 X) ^4 U4 S}+ d/ c( ?0 d" d( J- r) r# |. f
: v$ A6 k1 r1 ]' Z1 t+ j: T4. Result组件基础& h1 A l9 b8 K& ~
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户
, j% K1 N* d, Q" o不同的的Result针对不同的数据格式
0 N' u0 [" q. a如果需要特殊的数据格式,可以自定义Result
1 b, N8 v( {: J+ cstruts2-json-plugin-2.1.8.1.jar
- F$ W; D9 ?* W8 o* w% N$ a5 G ~, t+ V
|
|