该用户从未签到
|
1. Action组件0 o$ q' Y* i9 y* s3 l
1) 每次请求struts2会创建一个Action对象,不需要线程安全& Q& l- O, N, v" S' M7 W
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶' E# g- x; ~- z3 b, B
可以通过OGNL表达式对当前的Action对象的属性进行访问. f% S: w: B5 p% x% L9 @2 U
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
3 @: j2 n$ F* R; N( l. K6 x4 o2 P Action的执行方法:调用业务层,根据输入计算输出
0 E" \5 d z6 x) A- d+ { u# B( B/ v
2. Action的配置
% Y, R# ]. ]4 H( g! {1) 基本配置
& r1 d$ ?2 q N, p3 e0 d<action name="" class="" method="">
" X* H+ P# q% M; j$ p</action>
7 Z }1 q* P8 e9 m+ L' o% q2) method默认为execute; class默认为ActionSupport/ J& M' ^2 p- S3 x0 m' W+ `; ~
可以更改class的默认值:
! d6 ?6 t! M4 L) S$ G: d <default-class-ref class="com.tarena.tts.action.BaseAction" />
* l& `4 G/ C ?5 R8 V3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
. ? v# S3 L" \% g 这样可以控制Action的粒度+ ?; l- G+ H% | j/ @# ~
<action name="action1" class="com.tarena.tts.action.FooAction"1 G7 L& z0 T$ {2 P9 {/ ~% h3 o1 b
method="one">( K% n# y' n2 K: R& Z# ^3 v
</action>/ d" z J0 L" K) w( Q/ p: l8 H* ^
<action name="action2" class="com.tarena.tts.action.FooAction"
6 L* Q5 o; D% \3 ] method="two">: ] _/ Y' g% {# `$ S0 k
</action>$ @; o, [" y. Y7 O7 M! k
4) Action的配置name属性可以使用通配符: "*"9 @7 R0 F1 Y$ M
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">- {$ g9 P: C0 @$ L) h! S9 D
<result name="success">/WEB-INF/jsp/{3}.jsp</result>
4 w3 ?( ^1 R* L8 B' p0 N1 r</action>7 \, }; M* N5 `# p) U
- Q2 H8 K. b( m( L3 ?
5) Action可以被注入属性
: s$ q5 e8 o/ n+ W4 T3 y3 V3 o<action name="goo" class="com.tarena.tts.action.GooAction">% x$ N! K! h" y* O5 O- U
<param name="number">120</param>4 w; M; w, v9 G# d; C
</action>1 D: y" [5 ]6 Y0 e o
8 N4 G V0 X# F! c6) 可以修改默认的后缀
, n6 M* f7 [( } l( p! B<constant name="struts.action.extension" value="action" />
# ]# L' G. D0 ^; O1 O# H' |8 s0 @! y7 v! _
3. Action中如何访问Servlet API
. F' n6 m+ W2 C$ w1) - V( P) |' B6 M: f
HttpServletRequest request = ServletActionContext.getRequest();/ V# w g8 |) [7 l
HttpServletResponse response = ServletActionContext.getResponse();
/ a. A! ?8 B3 C( s$ Z; ~& l. Q/ IServletContext application = ServletActionContext.getServletContext();
: `) @0 ~- c) q) l# Q2)8 _+ m/ \% Y' n) ~ w
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用& p& w# u8 S4 B) k9 b
相应的方法,通过参数传递需要的对象(request,response,appliaction...)
9 J! E+ D# P* _2 [7 B0 wAction只需要在该方法中持有该对象,例如:
2 `5 u2 \; v. Apublic class BaseAction implements ServletRequestAware {2 ~$ G5 ^; Q2 L$ v: ~: X
protected HttpServletRequest request;
$ `' _# q6 D& a* s& g
3 r: i7 c; I0 q /** a1 Q$ Z% N- m2 Q/ n' y$ B: K( `8 Z3 ?
* Struts2会调用该方法,传递request对象
+ W+ z) x. `: J7 W; d* l */( T( J1 s' U/ r5 f
public void setServletRequest(HttpServletRequest request) {
5 Z# h$ c6 Z; M! K' ?3 r* Q. V this.request = request;; I# a+ {( \5 b# F' j
}- u6 V8 R: X4 F! m4 z1 j. f1 j( C
}
" z# D: K# H2 k
5 b9 I; _& I* u: f3 V- A4. Result组件基础) T/ i i8 v. u8 L4 m
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户3 x2 z4 q. @/ K9 i1 j6 k
不同的的Result针对不同的数据格式1 ?) h3 @9 K& t
如果需要特殊的数据格式,可以自定义Result, r0 [9 } e3 z& e; r2 @, K
struts2-json-plugin-2.1.8.1.jar) O* b# a( b% e
# h$ T% i3 I; J/ w% @7 |
6 h6 F. }: ?( y7 q+ T |
|