该用户从未签到
|
1. Action组件
: \( }$ X1 g$ Z1) 每次请求struts2会创建一个Action对象,不需要线程安全
, \! C* N9 @/ l5 ^2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶1 g+ b, a, z. ? P& z
可以通过OGNL表达式对当前的Action对象的属性进行访问
8 l, [8 X% E4 I+ m9 q3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出" U( e( o o/ }7 s6 E. Q
Action的执行方法:调用业务层,根据输入计算输出5 u" k7 f" T8 c5 C: @, `
7 d' a" A$ L4 j9 W2. Action的配置5 U- D& r% W9 v8 A; @1 }
1) 基本配置
; b4 q. { _. `6 |4 l<action name="" class="" method="">, S. U; U' g i; O
</action>
' {1 L; t+ d: M7 D7 y; V2) method默认为execute; class默认为ActionSupport: @ p, x, w: B6 X7 H
可以更改class的默认值:
. C. r! O- U* ?, z <default-class-ref class="com.tarena.tts.action.BaseAction" />
5 W2 J2 z. U9 `+ d* M- q# _! w3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
z) S; n! ]% l) D! l( l0 ] 这样可以控制Action的粒度; D, g$ ]- c; B9 i3 G. P b7 v( |
<action name="action1" class="com.tarena.tts.action.FooAction"/ C! s3 J( J/ ^" Z
method="one">
- s/ j; |( u i9 f</action>8 g2 }7 h! I. {
<action name="action2" class="com.tarena.tts.action.FooAction"5 r# M; J2 H% h6 X
method="two">/ f5 e7 d G: o ^( }
</action>6 J7 T2 P9 a9 s, s; r$ ` l6 a
4) Action的配置name属性可以使用通配符: "*"% h0 x3 N2 e9 U/ g
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
S3 O. m9 K# N* y; Z9 B <result name="success">/WEB-INF/jsp/{3}.jsp</result>
: t3 p8 {& W* D) i* O</action>
. i" [# }/ A! H' O. D- R( [+ m/ {6 m
5) Action可以被注入属性) M6 d! w; |: }0 R- ?
<action name="goo" class="com.tarena.tts.action.GooAction">) ^& k; C$ @7 P u# {4 T
<param name="number">120</param>
; k9 F) e' B2 S5 A& O* ]6 U</action>
( E7 t2 b2 p. \. L+ q$ s3 e
. Q6 j8 z4 c. M# a* h6 u6) 可以修改默认的后缀4 l* n( e) U: F$ m
<constant name="struts.action.extension" value="action" />
& p. d; g7 d( V( Z9 F9 O; [3 u8 u
# i, j2 F4 {( ~' U7 T3. Action中如何访问Servlet API
) R% X3 @/ M# q6 x% }/ X1)
, c+ A: `) \+ jHttpServletRequest request = ServletActionContext.getRequest();+ x* l. v- { W9 p
HttpServletResponse response = ServletActionContext.getResponse();( X$ u) J/ f# n* Q* W( `0 w0 ?
ServletContext application = ServletActionContext.getServletContext();
+ T3 D( b3 e8 ?# m: o2)
, M# ~" E1 j; D P) l) T% |* V; tAction实现了Aware接口,Struts2在初始化Action对象的时候会调用: [. ]- I5 K; R
相应的方法,通过参数传递需要的对象(request,response,appliaction...)* b; P+ P6 w. j1 C
Action只需要在该方法中持有该对象,例如:
) I0 [% ?3 \4 d. J' A/ vpublic class BaseAction implements ServletRequestAware {
5 i9 l2 D+ W, L protected HttpServletRequest request;
7 f$ C) B1 L$ f6 m- j4 Y, b
3 l" _, y" @) c! W /**
. Z$ D* v) B" o: U * Struts2会调用该方法,传递request对象
3 F- K( e' Q n3 J */( ?- ~- K5 S m, [ ]
public void setServletRequest(HttpServletRequest request) {
9 v1 v' `; Z& h this.request = request;
" e) x% }5 T- L0 B# e6 B } L- @0 A; D5 u6 _; Z
}. ]' b8 z- c9 \' n3 h0 a% \, c
3 V4 q% G: J) N6 S# w e1 \- k7 l
4. Result组件基础2 k: p% }% W- d0 P! x, l
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户
/ S3 Y2 n5 v& y2 T, S不同的的Result针对不同的数据格式
3 h/ r0 X( a7 {& l如果需要特殊的数据格式,可以自定义Result7 X9 ^* D$ V: X: V5 ?, l, k) E1 ^+ B
struts2-json-plugin-2.1.8.1.jar* Z4 f9 X$ ]) O; ?; d0 T
! t# J* z6 r& T k3 p! v# L( X/ }/ U; ~$ w) U3 M
|
|