该用户从未签到
|
1. Action组件
) b6 g) X/ Z7 C X1) 每次请求struts2会创建一个Action对象,不需要线程安全
& ~ H1 T4 \' \" M% g6 d2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶, Y& x3 U1 r z1 P( V+ L# s: f
可以通过OGNL表达式对当前的Action对象的属性进行访问8 A. N1 w' G4 U6 X8 E
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出4 L7 R l" f! a( X8 N9 x/ _- I
Action的执行方法:调用业务层,根据输入计算输出 y% j5 b7 b" Z) n3 F6 Q
0 p5 r2 z% h3 H9 r* I, a, J2. Action的配置
+ X9 z9 D5 w; ]2 A; f" \1) 基本配置 # {- z' _# c$ K- l2 m
<action name="" class="" method="">
2 R# V# K: ^6 w/ V! b' N</action>
* `' e$ |# _2 T& s2) method默认为execute; class默认为ActionSupport6 ?; X8 H5 A' ~
可以更改class的默认值:
) P8 s% a; A5 b+ f8 o, H <default-class-ref class="com.tarena.tts.action.BaseAction" />: b9 S( ~, \* |3 d
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
3 e6 |' S# C6 ]- e 这样可以控制Action的粒度
h' V: j. [5 l3 G- d<action name="action1" class="com.tarena.tts.action.FooAction"
; d1 i$ P. A& Q0 _ P+ o method="one"># O# ^6 V- l4 r, B* v4 L' F
</action>: e" R) A2 ], u7 c
<action name="action2" class="com.tarena.tts.action.FooAction"
* [* \7 c2 O2 `5 | method="two">
* P9 d' g, I$ _, |! E</action>/ m, h6 s2 z! D. r
4) Action的配置name属性可以使用通配符: "*"1 e B: v9 C1 }, a/ v; A
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
8 `# A4 V5 ]* c- w- Y! V <result name="success">/WEB-INF/jsp/{3}.jsp</result>
' D; d i9 b: B1 ?4 S6 D</action>+ r+ }7 N1 @/ V9 i6 C
d( Z" r- s1 k5) Action可以被注入属性) A5 c" m% B6 a4 \
<action name="goo" class="com.tarena.tts.action.GooAction">
9 X; [3 k* y7 \6 U/ E <param name="number">120</param>
2 e& T( \( o2 B1 [$ W; p; K2 {</action>% C% e9 H/ `! I( O( T
3 j+ v5 b1 N) w. x# R0 w& O6) 可以修改默认的后缀
' S8 t& R3 ~& o# M+ Z0 v; Q: e! n' R# |<constant name="struts.action.extension" value="action" />
% q& w# z2 T- d5 f& w# `
2 G! S' y) K4 D3. Action中如何访问Servlet API
& ]1 e' T& ?" E1)
( T U+ h. Y8 ]: c4 E$ B1 L8 o1 hHttpServletRequest request = ServletActionContext.getRequest();
. I& k% }- W( e8 f1 t7 P7 HHttpServletResponse response = ServletActionContext.getResponse();/ u' ?# L* m! u
ServletContext application = ServletActionContext.getServletContext();
$ [+ \3 _' g. s& f: D& Y, Z( j2)( G/ `* E0 E0 x( B* y
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
- y( ~) x9 D, u9 K3 ?* y相应的方法,通过参数传递需要的对象(request,response,appliaction...) s1 @" Q0 `5 N3 R( M6 F5 H: N
Action只需要在该方法中持有该对象,例如:
" N$ }1 |( {+ v' } q) ^5 vpublic class BaseAction implements ServletRequestAware {8 Y3 h; S! \7 G# J( Z
protected HttpServletRequest request;. J3 P, h, j% ~3 e6 S* K
V) w9 ?; ]# v+ M! e9 o
/**
, g4 G2 V% i" T2 @0 {. x: `5 S * Struts2会调用该方法,传递request对象( N1 j1 l W6 Y8 g
*// X4 E8 s9 I3 t$ A* }
public void setServletRequest(HttpServletRequest request) {" b0 V% j8 s0 _" s
this.request = request;
8 n7 }7 L2 n/ S$ z( ? }% J8 t. \: I1 v) m
}
7 A" K5 a( g3 |5 i4 y
, G$ w7 `6 H0 O8 l" L2 v8 Q% E9 h4. Result组件基础
4 O/ X( {/ L5 X: C; iResult组件负责将当前ValueStack中的数据以适当的格式输出给用户
1 y% b0 ~6 N. v0 l' S' L* E$ Y不同的的Result针对不同的数据格式7 Q$ @" J4 u5 Y S7 }. y, k
如果需要特殊的数据格式,可以自定义Result
! Y8 I* X0 ?- ?2 P! O6 \struts2-json-plugin-2.1.8.1.jar
2 {% K9 k. N& n; e3 E( T" S2 G, ~/ \7 T3 ^3 c- q
$ L Q/ O. k) F$ H
|
|