该用户从未签到
|
1. Action组件 e6 R, q; K# Z! t% b
1) 每次请求struts2会创建一个Action对象,不需要线程安全 I8 n/ H5 P- p+ Z2 C# E+ b8 K1 G+ N
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
( E+ E$ i3 j2 G% y4 U 可以通过OGNL表达式对当前的Action对象的属性进行访问, H$ C. u6 y7 A7 Q9 p3 q' d. l4 U
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出$ I6 M' D. w& C6 a$ y" H
Action的执行方法:调用业务层,根据输入计算输出. c: C- U" s* W0 O
; F: h3 z3 V1 V
2. Action的配置. L7 E, ^1 b" R( A0 }/ |; U
1) 基本配置
6 \+ E7 I" ?, B! V( N0 U) T7 Z<action name="" class="" method="">% o2 \/ Z/ [1 n) b" R" X/ I J
</action>
3 {, d1 a5 J! C* F( d2) method默认为execute; class默认为ActionSupport# |" ^5 f8 @) e* w% g
可以更改class的默认值:: d& u# o! [3 W) G5 x0 q5 v
<default-class-ref class="com.tarena.tts.action.BaseAction" />
$ T: `8 W P1 o8 q/ E3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
7 R$ ]8 x+ f! i' J! Z, k. w 这样可以控制Action的粒度
4 v% ~* j9 d7 V. v, [0 K0 B<action name="action1" class="com.tarena.tts.action.FooAction"
, {- }, _5 U: ~) ^% f, B1 o method="one">4 A$ g$ L& F4 [, ?
</action>
; ]. H. b: B5 |, ?# \& x: ]# ?9 \<action name="action2" class="com.tarena.tts.action.FooAction". k0 f! j K4 ^7 J% U" L9 P+ E
method="two">: W' h1 Y( X8 Y% n5 a+ Y
</action>
4 u# H' }: x. G2 k _4) Action的配置name属性可以使用通配符: "*"
' s6 y' k5 W4 q<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">3 F2 g' `. T9 J/ k+ ?! m
<result name="success">/WEB-INF/jsp/{3}.jsp</result>: x2 d3 ?) o: u. X+ u& N; s- o7 R
</action>$ G5 a+ p' U3 I; R* X; ?, A
' s7 b5 v& r3 e/ F8 B# M5) Action可以被注入属性% Q" }9 f6 N9 W9 @/ _6 R
<action name="goo" class="com.tarena.tts.action.GooAction">
5 I8 u( ^) q* }0 ~) m$ _- _( S <param name="number">120</param>
1 I5 V+ p: |3 H* V</action>
% M. `& l' W0 h% @3 U
# X$ K% l. D! z& Z% A6) 可以修改默认的后缀
/ Q& }6 i# h) z<constant name="struts.action.extension" value="action" />" K+ b0 W/ K$ I H0 M
j9 j- O( |- U7 }3. Action中如何访问Servlet API
( ~: w% D; T5 I- A1)
7 H4 ~$ ]3 U" h: C$ V) o2 B$ V- _2 \/ p. uHttpServletRequest request = ServletActionContext.getRequest();+ i, k1 ?0 D- {) }% x1 ?6 y/ k) H+ l
HttpServletResponse response = ServletActionContext.getResponse();
3 f( K. e# p3 ^- q5 q dServletContext application = ServletActionContext.getServletContext();+ ?0 j( J: Q+ W: L6 I) `0 o5 e
2)
% _+ a3 [" O- e2 U7 j% T( ?: h/ _Action实现了Aware接口,Struts2在初始化Action对象的时候会调用: K6 g+ s% _; z2 E: V" }
相应的方法,通过参数传递需要的对象(request,response,appliaction...)% c O$ S9 D$ T( U9 J4 C
Action只需要在该方法中持有该对象,例如:3 h6 D' x: K/ M4 }
public class BaseAction implements ServletRequestAware {
, x8 A/ T2 w3 z. a y+ Z* [ protected HttpServletRequest request;) \1 Y9 ]/ Z% d }$ z
/ u4 [5 R/ U) w6 E* U$ g$ o/ s( V: u. Z) M
/**$ W0 }+ E6 \: W1 o5 s* i
* Struts2会调用该方法,传递request对象' P0 h" ?$ `6 [/ }0 b6 _- p5 d
*/
3 e' L/ I; Z& v. z7 d. F2 u public void setServletRequest(HttpServletRequest request) {
2 c' C, }5 a* v this.request = request;
* E/ J, o5 K, \! o! I( r4 S- M }7 x; T7 r# k' x1 B1 I1 e3 Z% t7 n. Z
}
' c3 b- a, ]8 b5 k+ E; l) W* R5 y& f/ V7 B& t# D
4. Result组件基础
8 Y4 U Y$ V# s* \) vResult组件负责将当前ValueStack中的数据以适当的格式输出给用户
& a3 X1 G+ c$ m/ ~不同的的Result针对不同的数据格式
( O3 j+ {" o' W% L+ `如果需要特殊的数据格式,可以自定义Result
6 s6 e/ R2 @& x% B% f8 Ystruts2-json-plugin-2.1.8.1.jar
, L! }# }9 ~0 s# }8 [! z. V9 h T$ t( [. U& ]( n5 Q
|
|