该用户从未签到
|
1. Action组件
+ c& m3 W% B1 b5 z0 A, @" x& K' }1) 每次请求struts2会创建一个Action对象,不需要线程安全
* G0 r. T; [/ v: w0 }& N8 o2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶* r# _& M, M+ L
可以通过OGNL表达式对当前的Action对象的属性进行访问; z5 Z! O1 h8 J, m0 f+ c+ ]1 C
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
5 L. t! C! K% g# {- n. E/ R Action的执行方法:调用业务层,根据输入计算输出
- d1 s$ G1 Q2 `
& W+ z$ W" E4 U0 `* L; j2. Action的配置7 T2 c/ d6 z9 ^1 `
1) 基本配置 % b* ?- \5 k3 _
<action name="" class="" method="">1 N2 G# W% j! r7 h
</action>
" `9 A! o1 m8 K, c- t- c2) method默认为execute; class默认为ActionSupport
' v/ P! J6 K9 Z& I* d4 H2 m 可以更改class的默认值:5 Q' t, p1 B. P( h" o- X
<default-class-ref class="com.tarena.tts.action.BaseAction" />
. y' f* O# G. x. r/ C0 S! x3) 可以实现多个Action配置共用一个Action类,但调用不同的方法 B. O1 h7 e$ I
这样可以控制Action的粒度& k2 O0 N, }6 X, x
<action name="action1" class="com.tarena.tts.action.FooAction"% {4 u8 k& q3 @9 h( C
method="one">
4 Y/ x( B3 I/ }# ]7 l5 h& ]</action>
! k" T4 V2 `7 v6 | s4 F( H- j<action name="action2" class="com.tarena.tts.action.FooAction"3 W1 S$ d r( K- n7 f
method="two">
% V6 U0 @4 A F q4 d# r- p Y" g</action>
: J6 O% q0 k" e/ A9 ^4) Action的配置name属性可以使用通配符: "*"
* ~3 _5 d' M' |/ o. N4 p<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">( Z6 V' v; X, A. @: S8 [
<result name="success">/WEB-INF/jsp/{3}.jsp</result>) h; M5 H3 C6 Z/ W/ w
</action>5 M4 _: n U. l1 `7 v, B/ d1 h
2 R4 r9 Q- s) c# A1 N! R5 [5) Action可以被注入属性9 {7 H' j$ x# `4 J
<action name="goo" class="com.tarena.tts.action.GooAction">
" L8 H; Q" x+ W$ f <param name="number">120</param>
3 V- r4 U3 Q' } x</action>
0 Z, y# c6 e, D/ L2 O+ u3 n
) A9 O9 \5 J, ]# Q6) 可以修改默认的后缀9 I5 R) m: Y1 D! |
<constant name="struts.action.extension" value="action" />( L$ \/ s- v" x# s$ y& s+ S6 ?
) {. ]0 Q1 s% Y4 W% `
3. Action中如何访问Servlet API3 L3 i. Z0 o( E: u
1)
" p* Z$ o! w+ k6 E8 n! H% lHttpServletRequest request = ServletActionContext.getRequest();
( w4 v1 u( ?* B! P7 rHttpServletResponse response = ServletActionContext.getResponse();; M3 e1 F E( Z6 G) Q
ServletContext application = ServletActionContext.getServletContext();& C V! L1 T. [6 ~( G8 I$ F
2)
) Y- ^! z8 b' h! {$ Y/ T% ]Action实现了Aware接口,Struts2在初始化Action对象的时候会调用3 i9 A. R) |2 V6 Z5 b
相应的方法,通过参数传递需要的对象(request,response,appliaction...)3 g7 ?6 `0 H9 m7 {3 ]: v2 v. W/ J
Action只需要在该方法中持有该对象,例如:
. r! e7 U; d. W) O! G) S; `public class BaseAction implements ServletRequestAware {- I! _6 k, I2 p" U
protected HttpServletRequest request;
U' F8 h5 t2 B# w) ^* q- J1 K 0 i- R X7 u! P8 i6 q. \0 Y; M
/**
) K2 R) J2 q& L% d! l+ w* V# D5 y * Struts2会调用该方法,传递request对象
3 M8 z5 u' a. Y% H& r */! N, u& _2 k$ s. C
public void setServletRequest(HttpServletRequest request) {
- X# b, Y* u1 U this.request = request;
) n9 E: D& _2 @9 z$ F' G& V- p }
. g6 H" J8 C. J- ~: g}6 `) D) }1 e8 j! k1 I7 d8 ~
K$ m" @, x$ h l
4. Result组件基础4 M8 M$ g0 R0 B% W2 G7 ~9 s
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户
* P7 R+ ]" P2 @1 `+ y0 E% Z* }不同的的Result针对不同的数据格式) t7 k. X k9 Y& N6 z( K9 O
如果需要特殊的数据格式,可以自定义Result7 M1 c- X9 x4 \) h
struts2-json-plugin-2.1.8.1.jar
0 j6 G8 r# I$ Z+ d; e# ~! I% ?* c
3 F/ l1 _. E+ y |
|