该用户从未签到
|
1. Action组件
* n' Y2 ^% p8 g7 c$ t1) 每次请求struts2会创建一个Action对象,不需要线程安全
/ t5 k/ f$ d# o" B! z( @ `2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
- T+ K5 ?) F* ]8 ~ 可以通过OGNL表达式对当前的Action对象的属性进行访问
. C% m" s5 u8 @3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出, n Y$ p3 \1 R& D2 v, R8 c. s
Action的执行方法:调用业务层,根据输入计算输出$ q. ]* l% O+ M
6 ]% O+ N! s7 ?* _
2. Action的配置' n3 n$ E8 S3 F. `; P7 S
1) 基本配置
# A2 q! s3 ?) B1 O% w* {& X. A<action name="" class="" method="">( c' Z: W2 I' I+ C# g/ c4 V% m0 e
</action>
' |: c9 f8 v, i; X2) method默认为execute; class默认为ActionSupport9 m& s- e0 { T
可以更改class的默认值:- R# ?+ w6 `0 |( L" S* c
<default-class-ref class="com.tarena.tts.action.BaseAction" />
" A* J$ U9 ^ d; S$ I3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
: P3 v/ ?6 s" e+ G% `* p, a! l$ A. c 这样可以控制Action的粒度
- J( G* T; x/ [9 n- _<action name="action1" class="com.tarena.tts.action.FooAction"* I& W1 G. C' `* o
method="one">8 `9 `- B( y% ]1 ^8 X
</action>0 X) v$ H3 n$ r6 I
<action name="action2" class="com.tarena.tts.action.FooAction"3 \ [+ H, ]" p' X
method="two">
1 [7 k* J( J2 g! U h4 U8 {8 P</action>" R! y5 ~4 C7 I( T8 a1 [) G
4) Action的配置name属性可以使用通配符: "*"
* l4 m! Y: d, H<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
0 t4 V* `- v, ]0 R9 `6 Z7 b <result name="success">/WEB-INF/jsp/{3}.jsp</result>
+ U1 E* B! @" [/ y' c</action>
9 a5 {1 R! a, G; {& S8 p# h8 t \ d& h: W# g' E& R5 @# [
5) Action可以被注入属性9 N3 F7 r1 v# }7 `; C/ N
<action name="goo" class="com.tarena.tts.action.GooAction">( k4 d$ B0 @2 P
<param name="number">120</param>
! @6 W9 z8 _, G# u</action>
6 I/ ]* K4 Q- K# t( {0 Z0 D- K( ]' u: x( N/ N- n
6) 可以修改默认的后缀 M: Q6 x2 |) Z; ~$ K& X
<constant name="struts.action.extension" value="action" /># l, P# X9 z, Y# p; J
F# `" [/ a' |# m6 L# {$ u3. Action中如何访问Servlet API/ a9 J4 R7 K( a3 [+ }
1) 7 Q$ b& Z3 r1 |0 B) m) ], o3 w
HttpServletRequest request = ServletActionContext.getRequest();
% b" i$ r. G5 f, PHttpServletResponse response = ServletActionContext.getResponse();* X9 S* w: T! O/ K) [2 b
ServletContext application = ServletActionContext.getServletContext();
& n! z& Z0 Y6 m4 n+ }- M2)* F% ?5 F' J+ G6 Q( f: J7 m
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用" \7 Y/ a; G) J) Z* x
相应的方法,通过参数传递需要的对象(request,response,appliaction...)
7 O7 [( _# N/ k& |+ x" G& V; c `- WAction只需要在该方法中持有该对象,例如: _: C6 f3 F/ Y* N3 A3 a+ y
public class BaseAction implements ServletRequestAware {
- s4 W- l6 F! M; G( [ protected HttpServletRequest request;
( h. X( n E; o. v/ X
! X+ t I2 j$ v" {) f w: L: M' Y /**
3 C5 S/ s3 c& I {( i: a3 n. K0 u * Struts2会调用该方法,传递request对象
; e; c- t& V! b( \6 P5 I */+ d/ A1 k+ l; I% w% x
public void setServletRequest(HttpServletRequest request) {
8 g R; \. |( @5 A% `9 X% f* r this.request = request;7 p( J3 l" K( o3 E! f' Q3 U
}$ T5 s0 a# v2 m+ i: P
}
' y" q9 V- b5 T; B) A+ G/ B5 s& P; \, D# \/ p: _; _; g4 c: ]2 `
4. Result组件基础
y8 d# Z. a5 N, o. N7 O/ {Result组件负责将当前ValueStack中的数据以适当的格式输出给用户
( t! L5 |' ] r0 p5 k" P不同的的Result针对不同的数据格式; X2 ?7 C# } E9 w
如果需要特殊的数据格式,可以自定义Result
8 E8 _0 i6 L6 H8 Vstruts2-json-plugin-2.1.8.1.jar ~& q6 S8 p( @
2 H+ g. ]0 j* v7 `
|
|