该用户从未签到
|
1. Action组件2 Y' P/ V: S( V& D
1) 每次请求struts2会创建一个Action对象,不需要线程安全" K1 X7 s: y/ h! N3 n# b
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶1 |6 o7 m6 q& n4 {& a( ~" r8 \7 u
可以通过OGNL表达式对当前的Action对象的属性进行访问
0 w5 C3 w6 R M, ?3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
6 B7 j4 {/ I3 _7 ?$ m Action的执行方法:调用业务层,根据输入计算输出
+ p8 [1 G; y# ?' P; `' i. o" j- K% `( ^6 t; L) `; a/ K
2. Action的配置) d+ `& B! X/ [% z
1) 基本配置
- K& L7 H! j' P8 w1 S" |. `, f<action name="" class="" method="">$ p1 o0 W; E& j3 S( Q/ f9 E
</action>+ V4 C9 U6 X4 l `
2) method默认为execute; class默认为ActionSupport% @ n1 c$ H' H: ~% N; F
可以更改class的默认值:! q: s# H; d5 `: I) u
<default-class-ref class="com.tarena.tts.action.BaseAction" />
3 [. p' J2 j" A: K8 q/ Y4 k3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
4 |# P C! Y Q 这样可以控制Action的粒度
& z- Z9 X% J: E8 E( e<action name="action1" class="com.tarena.tts.action.FooAction"/ V5 K, q# X& H% r% X1 Y, m
method="one">. A/ q! T, j' l
</action>
+ x: Q) o" M/ z6 e; J2 @( G<action name="action2" class="com.tarena.tts.action.FooAction"5 C. H5 }. E) D8 X3 Q1 k2 u
method="two">7 t" `- l' E4 N9 [9 l! q
</action>7 @! I& r4 ?6 s6 w/ A0 N/ j T
4) Action的配置name属性可以使用通配符: "*"
% @" y- l" h7 k2 I+ T( F$ T<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">8 v6 Q3 l7 I7 S4 _& D: p
<result name="success">/WEB-INF/jsp/{3}.jsp</result>
, U' w# U: d2 C</action>
' t3 Z4 c6 M7 Q" k5 a0 T! n* ^' x8 j( y! p
5) Action可以被注入属性& `' J; O m* }& X
<action name="goo" class="com.tarena.tts.action.GooAction">
0 g2 s' d: a8 z1 u1 x! W <param name="number">120</param>2 ?9 @7 m( D) [# x
</action>5 H" `7 P3 j. I9 I5 X8 N% j3 D
( u2 G4 D6 G& p5 p3 S6 t0 h
6) 可以修改默认的后缀1 @/ ?1 w( v1 \, k. }
<constant name="struts.action.extension" value="action" />
' k! y( E' _5 d* R5 e* b
9 F% u9 I% ?, ^' H) ]3. Action中如何访问Servlet API
+ k5 {2 B, V) S. S$ g/ b) B1)
+ ?: Z H2 ]* T8 e& F8 n* FHttpServletRequest request = ServletActionContext.getRequest();* ~- g! K0 X" w' C( o
HttpServletResponse response = ServletActionContext.getResponse();; H, w, Y3 r8 k+ J! b N/ I
ServletContext application = ServletActionContext.getServletContext();
; X9 h/ m7 e/ x* ^. ?* p: E2)+ V! y: V3 s& ^4 n$ O3 I
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
) p/ h- I2 [6 |9 B, o相应的方法,通过参数传递需要的对象(request,response,appliaction...)
1 G# g- }! d1 b) |, |1 EAction只需要在该方法中持有该对象,例如:* l: J" ?' z5 D* D; e0 w) P3 o5 m9 l
public class BaseAction implements ServletRequestAware {, w; Z- M' d J
protected HttpServletRequest request;. A6 K7 h9 o+ v/ V
1 T. B2 L9 p1 V$ N /**
% Z4 e; U9 S2 [: H- ?4 c7 \* J * Struts2会调用该方法,传递request对象
, `6 k# K* P& b F# s */
- g7 X7 E6 C3 G public void setServletRequest(HttpServletRequest request) {0 N" B: \! [# F1 b' e
this.request = request;
8 @% R4 X" c2 k( C: [; r0 I" p5 H }
5 h3 W( {8 P. n3 m2 B- h}
# t: c/ C- Z, h; {5 f! x& m
& S! m* s" e$ W4. Result组件基础, p5 x' o# j1 \1 F- [
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户+ f7 @3 n7 y w" d$ M- C$ E
不同的的Result针对不同的数据格式
- ~- x' g) ^( @8 V3 x如果需要特殊的数据格式,可以自定义Result8 k+ E2 ~2 z+ }" z6 S
struts2-json-plugin-2.1.8.1.jar) P; [# ?3 b, K
4 ^0 a7 h. {7 X. G; _- z8 D
|
|