该用户从未签到
|
1. Action组件 v ~9 ~$ _1 q
1) 每次请求struts2会创建一个Action对象,不需要线程安全0 m6 i; B- {+ T' E) ^% F% u
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶$ Z7 |5 @. o0 F, j c
可以通过OGNL表达式对当前的Action对象的属性进行访问
! K7 [ W# B! x& k% y4 s3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
# G2 m+ `) z8 q7 n Action的执行方法:调用业务层,根据输入计算输出/ Q _+ ~1 z$ W' E( M+ Z
) E6 Q9 n2 B/ k: S5 Z- T/ [5 R
2. Action的配置
! l; F7 r2 t* J$ ^2 j* n* L( K1) 基本配置 # ~( x E/ J1 r# ~
<action name="" class="" method="">; v: l. f/ j3 t$ A% T: A
</action>5 [" R3 Y2 z" T* n( \/ T* n! x
2) method默认为execute; class默认为ActionSupport
e7 q' q/ ~2 X1 ~5 t 可以更改class的默认值:
$ h2 }; D# o V9 _ @. ^3 n( A <default-class-ref class="com.tarena.tts.action.BaseAction" />$ T& D% b* s6 I$ s6 O9 O# p# t3 J/ W
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法, Z- z; s. l9 V6 Y0 }/ d
这样可以控制Action的粒度* y1 g/ J) F) m" V; k9 [& N
<action name="action1" class="com.tarena.tts.action.FooAction"
% ^8 ?7 Z, ^# ~! t" V0 X7 `( a method="one">1 j, f; Y/ V1 r) N
</action>' q! D6 y9 o/ b
<action name="action2" class="com.tarena.tts.action.FooAction"2 {2 W) k W: W# \6 K
method="two">
# Q4 _3 n4 C7 T3 F: W2 w, a1 F</action>
8 I0 J# R# s E4) Action的配置name属性可以使用通配符: "*"
5 ?9 N' U; t- d4 l6 o<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">0 {6 V/ G2 S! W$ b" B
<result name="success">/WEB-INF/jsp/{3}.jsp</result>
: E% M8 e7 I& N# p. B6 Y. ]</action>
% f2 a6 w8 |8 q9 x
% V4 b! x( P, H! I x9 r5) Action可以被注入属性
7 E3 m+ U( \+ _7 k0 L9 \" a$ Q<action name="goo" class="com.tarena.tts.action.GooAction">* t- s! l1 u6 q
<param name="number">120</param>
& n; y/ ~ A( p) C</action>7 [1 Q0 @4 J$ @' _* Y$ }
$ Y) a/ x5 ~5 O) Q
6) 可以修改默认的后缀
: e' A! D3 Z& d<constant name="struts.action.extension" value="action" />& H3 n3 ]& l" n$ n! A
( B; P# X+ `0 C4 q @3. Action中如何访问Servlet API- t8 ^' ^; M5 L. l
1)
, a4 b z' g0 d. vHttpServletRequest request = ServletActionContext.getRequest();3 ?) X2 t3 v+ b& T( b) V) h/ `
HttpServletResponse response = ServletActionContext.getResponse();
8 ~/ k% y* X2 o3 v& f; X; f* x! uServletContext application = ServletActionContext.getServletContext();
0 j% V* P! o; ^3 m2)5 g& a% h( L# t7 A; d
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
0 {' n: d/ P9 a" K, s; E x相应的方法,通过参数传递需要的对象(request,response,appliaction...)- H1 ~- ]+ m) k2 T ~
Action只需要在该方法中持有该对象,例如:
+ N7 Z. W' S$ z" g1 bpublic class BaseAction implements ServletRequestAware {% x% K5 B# n" ^- l; h
protected HttpServletRequest request;
) I/ U# P8 ?, A4 d+ [0 C1 f
6 t2 K( v# C6 U! r: X" ^ /**' n$ `7 n3 ^- @; l" s( t4 E
* Struts2会调用该方法,传递request对象
1 ~1 G0 k9 K0 k+ V6 l */
5 Y* j9 T0 S8 a' [; u public void setServletRequest(HttpServletRequest request) {+ [) Q- P# p- M& a/ T
this.request = request;
, m0 l! m" \, \; P a, i }* | g8 O" a- c7 d/ b2 W
}0 r/ ~8 G8 o. ?4 W2 L2 N( ?& f6 `. d, S
$ n7 x& j6 Y o6 Z, c
4. Result组件基础
- f2 a1 i7 s9 }! kResult组件负责将当前ValueStack中的数据以适当的格式输出给用户
! M+ D5 b$ H, Y I6 S( s% ?! ^1 n不同的的Result针对不同的数据格式
" G& q" b7 g, d% E& G1 x' ?( b. m如果需要特殊的数据格式,可以自定义Result" p. o0 |4 M5 x& t
struts2-json-plugin-2.1.8.1.jar
7 U8 A3 e! v, X3 ^4 G. m7 v3 ?4 v8 P i& O3 ?# K1 N* j
|
|