该用户从未签到
|
1. Action组件# C9 Z( r) T8 o
1) 每次请求struts2会创建一个Action对象,不需要线程安全
/ B- S0 [! y4 j& s$ s3 y k, [/ k2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
& }# ?1 h' K1 z2 i* V( q3 v- v* c/ y 可以通过OGNL表达式对当前的Action对象的属性进行访问4 r1 A: _( K: }2 a) ?5 i) h! F
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出- }' S [$ L$ l9 H
Action的执行方法:调用业务层,根据输入计算输出
' P- n+ V& N6 J9 Q5 }1 _; G
/ m: Q: ?8 {! N0 _4 s; n" K2. Action的配置
p% c+ X9 y* u8 A- O1) 基本配置 / x% z6 P6 E, S L, z4 X
<action name="" class="" method="">- `+ g& K+ I# I+ `
</action>8 @6 o% i# r" K' D" e: p. H7 `
2) method默认为execute; class默认为ActionSupport& t. }. m9 r8 N2 x
可以更改class的默认值:
" H6 W. M$ ]( z4 P% B3 ]5 h x <default-class-ref class="com.tarena.tts.action.BaseAction" />
; j$ N' b# s3 A7 k, S0 W3) 可以实现多个Action配置共用一个Action类,但调用不同的方法; A o6 K- S8 |- h' l7 B8 Z5 t* s
这样可以控制Action的粒度
4 X. S; i( E- }+ ^: d' S& v<action name="action1" class="com.tarena.tts.action.FooAction"
% D) N/ Z! J5 U method="one">
5 r6 a; s% l y5 j% V' Q</action>
3 }% f' b8 ?) |" U% ^3 [<action name="action2" class="com.tarena.tts.action.FooAction"
+ H. ]+ O2 C0 x) c: W: e method="two">- | r9 S, I) r
</action>+ z. r. j7 s3 s0 F
4) Action的配置name属性可以使用通配符: "*"$ @! E* Y5 V. S6 `
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">& K& L# \3 \2 ^5 ]& i2 V# S: ?
<result name="success">/WEB-INF/jsp/{3}.jsp</result>
& Z. _/ k% a% h8 _; S8 [</action>
7 w7 s0 ?! t6 N7 n% y" Y7 [) @9 a. `- r+ d# J- N9 |
5) Action可以被注入属性
2 k+ Q8 k7 ^2 p/ z<action name="goo" class="com.tarena.tts.action.GooAction">
% D( }8 P6 k5 C4 l% o8 H4 P <param name="number">120</param>
! H* E1 r6 j$ V$ Z) N: F' U- o! m, A</action>. p, C2 n1 g% i. b, V, {8 e. [, j
1 b* `3 t# p* R. a6 m- n" o
6) 可以修改默认的后缀
1 B* ~6 g" h5 c' K# ~: K) b5 j<constant name="struts.action.extension" value="action" />
* `/ U- a" l% a
) g# n1 c1 X6 w. S3. Action中如何访问Servlet API8 f& o% S5 o5 k8 p: |
1)
- ^# E& V- {7 }0 L; tHttpServletRequest request = ServletActionContext.getRequest();
; D9 O5 Z- r1 F* A: q' B; \0 pHttpServletResponse response = ServletActionContext.getResponse();5 v+ M# I6 \7 K) a- `& S0 \3 n+ X
ServletContext application = ServletActionContext.getServletContext();" a- G/ Z6 R* d8 G% A2 _ u
2)
% D0 }# X s8 |Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
c6 \& }6 Z/ l+ n. g/ i% g/ D相应的方法,通过参数传递需要的对象(request,response,appliaction...). I- f$ g! R8 j* e8 F
Action只需要在该方法中持有该对象,例如:" V, G. ]( d$ g. L/ M
public class BaseAction implements ServletRequestAware {7 e' d" Z9 ^7 H9 ^
protected HttpServletRequest request;
3 o' o! g5 y/ i: {+ Z' Q1 {2 v 4 F$ f) g" w8 U1 {
/**
) G( F6 A7 |, R9 U. W5 o * Struts2会调用该方法,传递request对象
6 x! F" W2 L5 n' f9 K% s4 A9 W# e */
& u6 Q; L1 \, W. }- I public void setServletRequest(HttpServletRequest request) {
' k: h( \, o+ ]- j' n Q9 h this.request = request;
8 b; [/ q8 F8 n& }$ [$ @3 s }, n, R4 m, F: m! ?2 @! q( M
}
& Z& G R5 V: v6 L. @, U% S% Z* \6 O! X. L9 q6 O5 X& |8 A
4. Result组件基础
' X) a+ { f7 U rResult组件负责将当前ValueStack中的数据以适当的格式输出给用户
0 A) l4 m$ ~0 O- z& [5 d不同的的Result针对不同的数据格式 a: ~! @5 s1 u$ W5 @
如果需要特殊的数据格式,可以自定义Result
8 N; R4 Q& w9 p, h; u% vstruts2-json-plugin-2.1.8.1.jar
2 \) [/ K6 g( d" L3 K; S, @/ A a) W# `
|
|