|
该用户从未签到
|
1. Action组件* ?" ]- R; N& @" J/ t/ t5 A
1) 每次请求struts2会创建一个Action对象,不需要线程安全( A7 Q/ R3 U+ C; l7 |% c/ n) b
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶9 O7 g: d; R# J% J. t' y3 b
可以通过OGNL表达式对当前的Action对象的属性进行访问 _9 m# m6 q" G2 p W
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出* _( r; E& a0 ]* \
Action的执行方法:调用业务层,根据输入计算输出! E3 t. W8 U: O3 J5 _4 U$ Q
6 G" P+ q4 c4 S! P" v0 y; a0 C. c2. Action的配置1 L0 R2 r" [- z6 d/ \
1) 基本配置 5 @* Y" B: u( P7 R0 [) t
<action name="" class="" method="">
7 u, L# B( u3 a' x% @</action>
8 [) ^/ U/ u% L1 s2) method默认为execute; class默认为ActionSupport
) \4 h/ n [3 C; h* P; W 可以更改class的默认值:
9 R! e4 s! X, f6 y& h0 c <default-class-ref class="com.tarena.tts.action.BaseAction" />
3 B0 [& A9 Z+ d \4 |0 H6 w3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
1 s; ~! }5 Y& ~% _6 G/ Y 这样可以控制Action的粒度. i' c/ L" x( ?+ ^
<action name="action1" class="com.tarena.tts.action.FooAction"+ _# @7 ?7 }# W! c
method="one">" ^1 O2 z* `( m9 y! T! U
</action>
: B- O. o; s) \! `, }<action name="action2" class="com.tarena.tts.action.FooAction"
5 A, d& S2 q( f4 Y& ` method="two">
" A) g1 b5 \9 q' b Z; d4 F</action>
/ \; P( m4 d+ q4) Action的配置name属性可以使用通配符: "*"
, c, i% X2 d( o3 ^8 W<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">! M2 G' H7 w2 T) @, F
<result name="success">/WEB-INF/jsp/{3}.jsp</result>
9 M9 k) J0 q+ V7 v: \% m S& U</action>, d, y1 H0 e4 h9 W# ?$ {# E
' _& b6 x% |( Q
5) Action可以被注入属性4 z W2 o" r) M2 h ^& q
<action name="goo" class="com.tarena.tts.action.GooAction">7 N5 J2 G" d( f6 c/ L0 g. Z0 `4 e
<param name="number">120</param>
3 f) i0 }1 C; W$ B. {5 x</action>4 n' G2 M7 e0 Z
: E: I5 Q: o" B# _& L
6) 可以修改默认的后缀- a t/ q$ D$ x& o+ z) t+ r
<constant name="struts.action.extension" value="action" />
9 y: p* @) U( H5 E- P$ _; K* l9 B+ b2 `% M) r0 t4 B$ u
3. Action中如何访问Servlet API
% i9 h7 G& [: B: v% N% U1)
9 v# D$ B g/ u& ], R3 a. [+ m2 ^HttpServletRequest request = ServletActionContext.getRequest();
' e3 I8 x7 o$ H% V: BHttpServletResponse response = ServletActionContext.getResponse();/ @+ l' f& @8 f8 U* u
ServletContext application = ServletActionContext.getServletContext();
% X. M" y8 S* b }. n* k2)4 A( N) Z; f3 p$ h; q) T
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用/ r8 H" q8 V- L5 W& ?
相应的方法,通过参数传递需要的对象(request,response,appliaction...); K1 y& K- Y9 b! n, S+ q
Action只需要在该方法中持有该对象,例如:
1 G5 u4 ~. D: h$ o" V7 Rpublic class BaseAction implements ServletRequestAware {3 d0 W# U% h/ ~9 j, Y) ]
protected HttpServletRequest request;
/ I0 h6 H$ u- J- R 7 [+ V+ D# A0 Y$ C/ f; A" B
/**+ }7 x) v( W0 W0 z4 j( P/ F' @0 j( e
* Struts2会调用该方法,传递request对象5 K+ U5 S' y" o- T0 F" n$ y
*/
! T( ~5 U& Q! l public void setServletRequest(HttpServletRequest request) {" h. T, k/ B; g0 G) ^
this.request = request;
. F7 D: ?" y, e' O }" f2 q8 M: H3 v8 R8 M
}4 h s' W& X( A: I' R( f
3 r; l8 k& ^# y# M) N! `4 \
4. Result组件基础, }* A& O* m* r, f( x8 ?( n
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户 \& ?- Y1 u6 _1 R
不同的的Result针对不同的数据格式
2 x- J5 o4 W0 v( \; j$ n/ k1 I如果需要特殊的数据格式,可以自定义Result
' `- a) Y( [. u$ ystruts2-json-plugin-2.1.8.1.jar
" d( Q/ X1 e" \2 v1 a2 K
) x8 ~' ]& w9 M# Z" | |
|