|
该用户从未签到
|
1. Action组件
' `+ W: C1 w7 r5 q% a1) 每次请求struts2会创建一个Action对象,不需要线程安全
, t- k2 i0 Q! `: b& x$ ?# R ^" m2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
* a9 x( T) f- ^7 K5 _ 可以通过OGNL表达式对当前的Action对象的属性进行访问3 v& v8 [* y3 z$ b, v# |2 G0 U
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出3 W9 e1 x; Y, \% E5 B% F7 W
Action的执行方法:调用业务层,根据输入计算输出9 y' X/ L' f) P7 y6 N
% b" l& n" ` i6 z
2. Action的配置* I. j* x& y d; ~, D
1) 基本配置 " x0 T- a7 z" d! c$ R0 \, x
<action name="" class="" method="">
5 {% d3 X1 v6 l- o. i' @</action>
, K) O5 @, t6 E- ?* e" J: D2) method默认为execute; class默认为ActionSupport
* D: B/ }9 P5 A) _ 可以更改class的默认值:* l p9 s1 @ J0 Y, L5 R7 o- {
<default-class-ref class="com.tarena.tts.action.BaseAction" />7 p4 k2 N6 w0 }$ N
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法5 K4 V' Y' {$ P3 d2 f# \# v; \# |
这样可以控制Action的粒度
; |7 _5 _3 D- F<action name="action1" class="com.tarena.tts.action.FooAction"4 H4 ~0 k; ]; A& x. U
method="one">. A1 o( M! O$ v
</action>5 E, [* z& m. ]2 W4 Y* O0 N
<action name="action2" class="com.tarena.tts.action.FooAction"3 M0 ~7 K& n% J, U+ K
method="two">$ |: y( y, e) D
</action>
+ T% [( Q: M/ a1 o2 V4) Action的配置name属性可以使用通配符: "*"
2 s b" _& \3 @. L$ S2 L<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">; N9 g$ N+ J/ ]4 t f5 S
<result name="success">/WEB-INF/jsp/{3}.jsp</result>$ s. u1 P4 X9 \! B* ]6 }& a6 n# R
</action>/ U% \3 [! e& f
& a& \3 w m+ g$ f+ \5) Action可以被注入属性
( M$ I2 Y7 I! i' ?7 B" {' c<action name="goo" class="com.tarena.tts.action.GooAction">% M' X3 F$ o4 X
<param name="number">120</param>1 n% p* X2 p% L- Y4 j
</action>
$ {* E5 a( d! _
# T1 S" Q2 f( _6) 可以修改默认的后缀1 l5 t! y: m5 V7 p, a
<constant name="struts.action.extension" value="action" />, K# ?$ H% a4 A) W4 i& m
$ A2 b" k. Q& |) H7 [
3. Action中如何访问Servlet API
( N t8 a: y9 d# s$ l1)
9 C' B1 t# q4 dHttpServletRequest request = ServletActionContext.getRequest();
- q* O' N2 `' u2 D- ^. mHttpServletResponse response = ServletActionContext.getResponse();* l/ P: _3 i0 p# c& F& s
ServletContext application = ServletActionContext.getServletContext();
" G: C& {) Q) l* X+ {2); \% G; a2 Y' g5 o, g8 Y
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用7 s% F- U6 i: O0 T
相应的方法,通过参数传递需要的对象(request,response,appliaction...)6 `1 I( z0 W& x- v( K
Action只需要在该方法中持有该对象,例如: s+ }6 [) u8 e* k1 n5 W [/ @: d
public class BaseAction implements ServletRequestAware {0 i9 D% y- E+ v; ~% k" {
protected HttpServletRequest request;! C; T( ~0 U2 U# p7 P
$ V; c6 a4 W& H3 j- ]5 j; h
/**
, S8 Q- o" E* l7 E" A$ U& O * Struts2会调用该方法,传递request对象2 K. U4 _" B: Y; V9 E( P
*/5 y# ~- X r' t1 s7 y
public void setServletRequest(HttpServletRequest request) {
; D; D8 C' a: M3 n: o( V this.request = request;! C0 I, F$ [" K7 O5 _
}& B7 D$ l* {" ]+ R: c' W
}
7 f" ~; {6 f2 J8 H/ U- `( @) M. j( W5 t4 P. H/ }, x$ O7 ?
4. Result组件基础$ J( k; s8 C4 m& ]1 n' W6 \
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户* L9 d0 t4 B7 c6 U- N
不同的的Result针对不同的数据格式
% }4 f. h- g T6 E6 H: O如果需要特殊的数据格式,可以自定义Result
* S. p F/ Y6 v3 gstruts2-json-plugin-2.1.8.1.jar* n' B( S( u q( f* _" R1 D
. s% F- q* g( D+ u
) s' L3 c1 T' k! Q. b. p |
|