该用户从未签到
|
1. Action组件
' ^" g2 A) Z$ k0 v# B1) 每次请求struts2会创建一个Action对象,不需要线程安全
) k! Q1 \5 x, }7 j+ R2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
: l! y2 l+ Q/ f7 H q$ z1 ` 可以通过OGNL表达式对当前的Action对象的属性进行访问
& ^) G" u" o* o5 A/ r, G3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
" c, e( Y; Z. {" l& w: h Action的执行方法:调用业务层,根据输入计算输出
3 P b9 S. u1 R2 g
! Y. w# C( F0 e- Q+ R& J F2. Action的配置9 y: H" \$ X3 R/ s! r" w
1) 基本配置 8 d2 l2 t8 s" ?0 F" y
<action name="" class="" method="">0 K; L9 i. T$ O% t- b; ?
</action>
3 `( Z3 |0 L* i& m' L( X2) method默认为execute; class默认为ActionSupport: v1 G) z, q, B6 h1 M1 o
可以更改class的默认值:# c% S% N4 ~3 m' Y1 M1 j0 _
<default-class-ref class="com.tarena.tts.action.BaseAction" />
. b2 r) O/ D% T' o2 I% O3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
1 d V8 u* } ~ 这样可以控制Action的粒度5 Y6 I8 j4 W& K% h
<action name="action1" class="com.tarena.tts.action.FooAction"
; ]/ Q) [, G& y5 H1 H method="one">
. i: C* Q0 e, ]3 T</action>
" I+ H2 D# p5 ~1 u<action name="action2" class="com.tarena.tts.action.FooAction"' c) T- j, G/ N6 B# `4 ]
method="two">
8 w% N' x7 w* H- Q</action>$ b3 n: c! F2 @
4) Action的配置name属性可以使用通配符: "*"
% Y3 H7 m' E2 U: v4 L0 s% J<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
; L4 X4 ]6 d2 o5 W. g+ c <result name="success">/WEB-INF/jsp/{3}.jsp</result>5 |3 V3 K/ u3 B" N5 d3 ~( w" @
</action>
2 l4 w2 P6 c6 x# ^1 e0 D- u8 ~9 B/ ~$ i
5) Action可以被注入属性
5 H' e: X- f p5 }/ d. }<action name="goo" class="com.tarena.tts.action.GooAction">7 j$ K% ^" J9 ~' D, P6 R
<param name="number">120</param>9 {$ T/ B e& ?0 T$ J$ \
</action>
" f0 ^ A8 |7 {* q5 c$ |
+ L, }; j! `# m6) 可以修改默认的后缀
0 v, Y9 g3 { T; z/ m) k<constant name="struts.action.extension" value="action" />2 a# x; m, m0 Q1 U% v2 k
' x. [2 J( |0 K1 U
3. Action中如何访问Servlet API
8 K- S& R8 V" F5 I! _1)
/ g: h% U" J i0 zHttpServletRequest request = ServletActionContext.getRequest();9 B. J. I- Y# `4 \' C8 v! Z
HttpServletResponse response = ServletActionContext.getResponse();
# C+ I. j' ?) E& z, BServletContext application = ServletActionContext.getServletContext();
% \. n, F& ?8 o8 x$ i2)( _2 _9 j# I/ B* c9 p: v# ?
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用$ y: o* @, {, S' Z
相应的方法,通过参数传递需要的对象(request,response,appliaction...). a' h. W0 p3 s$ e* P' u
Action只需要在该方法中持有该对象,例如:$ Q/ X" v9 m/ M) z
public class BaseAction implements ServletRequestAware {
9 U+ V: V, T3 X, B6 ` protected HttpServletRequest request;
) |2 V: q1 y$ K& |, U5 n & Y- H$ x b9 H0 m) s
/**
& y2 q+ ~5 J2 N' x* Y. H7 ~* I * Struts2会调用该方法,传递request对象
1 S1 C; H$ a2 v4 I( T */
* L( Y5 A# T. T# k public void setServletRequest(HttpServletRequest request) {
2 r! H8 Q9 w0 k6 C7 J this.request = request;
$ ?/ k+ w/ R& u7 i. l# t }
$ l' J2 H+ j1 M' O3 y9 V2 v}
6 V+ m6 Z) }% T; ]! M7 i! P
8 m$ ?1 ] Q/ p* O4. Result组件基础
0 C' G1 _0 s' l+ oResult组件负责将当前ValueStack中的数据以适当的格式输出给用户4 v. Q8 r- n$ I+ @3 i$ G9 S
不同的的Result针对不同的数据格式
: V M- @ L4 B- T; U如果需要特殊的数据格式,可以自定义Result% @- Y9 ?* O/ I- n! f
struts2-json-plugin-2.1.8.1.jar9 U' q, L- N" k" S0 ]
# d( C8 F, [" q* A; Y, ^9 E: h
0 ?6 ]) z: v2 o |
|