该用户从未签到
|
1. Action组件7 H0 C* C* {9 `
1) 每次请求struts2会创建一个Action对象,不需要线程安全! K( g4 Q0 i/ B! n- w- Q
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
( c5 o; c. @& i2 q6 f 可以通过OGNL表达式对当前的Action对象的属性进行访问
! n( V( O2 a/ J. x0 Q3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
7 D2 H3 ?. a E" {( n8 \# w" | Action的执行方法:调用业务层,根据输入计算输出6 l3 i3 J3 C" {
) \) y' n* {' ]7 l9 Q
2. Action的配置' \% ?& y6 F/ X3 ~3 l) t5 ?
1) 基本配置 & _7 ]7 h2 k% _1 Y/ G) k
<action name="" class="" method="">! O2 ?' g! D# g, f
</action>
1 Q O- M* _. h7 [& W2) method默认为execute; class默认为ActionSupport
% _' d2 t# p G0 a, J1 c' E 可以更改class的默认值:2 c7 U9 i5 v0 x0 I
<default-class-ref class="com.tarena.tts.action.BaseAction" />
) A' Q' F7 H, |, n; l2 o! \3) 可以实现多个Action配置共用一个Action类,但调用不同的方法/ Z& f+ j; s' h# t$ f [
这样可以控制Action的粒度
' f q! B. X" D' T3 a0 w/ S<action name="action1" class="com.tarena.tts.action.FooAction"' |% P Z. |) ~5 \ g; ?
method="one">2 s6 q6 a, G2 v* ?7 }, ~
</action>+ Z; i* T/ R: m( t2 B
<action name="action2" class="com.tarena.tts.action.FooAction"
9 D& L3 ?& x* ~8 i3 I- \ method="two">2 ~* ~* @( ^" d2 i$ W3 D; |. d& {
</action>
. g& ^2 J" a- p8 c3 w0 Y; m4) Action的配置name属性可以使用通配符: "*"9 J5 k( S3 `( ^3 d- Y) a) b! F
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
* J1 y& E$ T: s/ B l1 j <result name="success">/WEB-INF/jsp/{3}.jsp</result>. o; N7 b- I3 r
</action>$ K: P+ u3 a! ^) S( {$ B
- f6 W) o3 F* r& T/ g9 U5) Action可以被注入属性! d7 e8 F7 R" G
<action name="goo" class="com.tarena.tts.action.GooAction">
5 A! Q1 M R4 e" ~ <param name="number">120</param>4 h$ T* D D+ n! i
</action>
6 ~, V6 O5 b4 g8 \
/ v( K/ e3 K0 F, t6) 可以修改默认的后缀7 A$ x+ w% T1 F* l
<constant name="struts.action.extension" value="action" />
7 c$ K# P& H1 q& N5 m8 m
- N6 X& h/ ?3 `: e6 i3. Action中如何访问Servlet API
0 P, D! V- s1 G1)
0 H6 Y, _: M; W2 c) x0 J) H/ pHttpServletRequest request = ServletActionContext.getRequest();# d: |2 v$ Q5 G
HttpServletResponse response = ServletActionContext.getResponse();
( L. F) S4 }$ ^. mServletContext application = ServletActionContext.getServletContext();; r: k" b; U, N6 C9 H- F. {
2)- v4 J1 ^, \+ l
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
6 n8 N3 \1 X/ m8 j- d3 W相应的方法,通过参数传递需要的对象(request,response,appliaction...)9 X8 R. s( L$ U2 \4 I W4 b L
Action只需要在该方法中持有该对象,例如:. r' v! M5 ]) p8 b
public class BaseAction implements ServletRequestAware {1 v) j' H6 r( B& B1 ]
protected HttpServletRequest request;
( i/ x; S* T6 s
; U5 F" a+ `4 T- d1 }: G% B /**
0 @$ v, F2 @# _ f * Struts2会调用该方法,传递request对象
- t+ T* }- Q E9 W5 I3 B; ~ */% y5 @/ x" ?2 f$ s4 s% }
public void setServletRequest(HttpServletRequest request) {
! f$ O! t+ i: m this.request = request;
7 N: |3 ^5 J" P. z" r0 [- j3 t }6 Q! A* h3 Z, Y# P& D
}
+ O; h% n9 I, T. o" [
0 I' f# @4 k( G8 `% g, l2 d4. Result组件基础
; _' d1 W& h/ Q8 i- w. k7 G u# \Result组件负责将当前ValueStack中的数据以适当的格式输出给用户 D( _, v! V' O! U
不同的的Result针对不同的数据格式
5 j7 ?" I! [; {) k% Y* i5 e2 k3 F: f* q如果需要特殊的数据格式,可以自定义Result, l1 A# X) ^9 P2 p; L& U
struts2-json-plugin-2.1.8.1.jar
5 E6 {) u: ~: }3 o1 H' c. J# m, w8 U% L7 S2 x: u4 X
1 {; t/ f6 U9 Q: {
|
|