该用户从未签到
|
1. Action组件& w9 a# m- `' L* C0 F# Y8 j' j
1) 每次请求struts2会创建一个Action对象,不需要线程安全
7 Z! O/ P R5 v ~- ^2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
- Y8 B- w1 t5 ?$ c7 ]' C 可以通过OGNL表达式对当前的Action对象的属性进行访问
: O& n F& l* b& j" D3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出/ k# w6 T4 O+ h! C. c8 G+ H
Action的执行方法:调用业务层,根据输入计算输出
/ [0 C9 V0 I7 O; \) a/ c
" g: I- X u3 u& j- |7 b o2. Action的配置
8 C$ J) j. ~% \; a" p1) 基本配置
; z+ `: [% H2 V7 i( S3 ~) M<action name="" class="" method="">3 P- A- u3 G$ k( K! z
</action>
5 W( ^# X& z4 b% @" P4 _8 o2) method默认为execute; class默认为ActionSupport D* O$ Z& p0 O7 Y* @' R
可以更改class的默认值:, d. }6 ]" T k2 m
<default-class-ref class="com.tarena.tts.action.BaseAction" />& w% ?1 _! ~; a6 ?
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法* F* n6 F5 \" O5 h( x& ?
这样可以控制Action的粒度, r# {1 R& v- F- v2 _
<action name="action1" class="com.tarena.tts.action.FooAction"0 l- r3 S/ `( C K. P
method="one">
3 A7 V: e! ~6 C- _</action>, W" N% v" e0 h5 q' W4 Z% w
<action name="action2" class="com.tarena.tts.action.FooAction"8 ?0 v+ `6 m! P" f- a1 h4 d( u( e
method="two">( r/ _- E' U6 D
</action>
% b. V' q6 r! v( b6 ~5 c6 s8 K6 W2 y0 V4) Action的配置name属性可以使用通配符: "*"
) q4 P f& z& H- ?<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
. ~3 |4 }% r: ^4 U% Q7 @' {0 I <result name="success">/WEB-INF/jsp/{3}.jsp</result>
, O& ]. R& r7 P) Q</action>3 e( j; G- ?" `7 T
4 ]" n+ A+ V, P( h% [: j
5) Action可以被注入属性& L0 M8 s# ^1 K% u& P8 \# n s0 T8 a
<action name="goo" class="com.tarena.tts.action.GooAction">
# E$ z* G7 I# e' l <param name="number">120</param>
1 _1 Y- V" s, s! G5 i, y# `</action>
1 e6 E! `9 H, ]# s" t1 I e1 f# G; I0 b& A
6) 可以修改默认的后缀) _, P0 j1 A* O$ _% B
<constant name="struts.action.extension" value="action" />" C4 Z2 Z7 ?- Q5 K+ G! ?- M
$ @* t5 S2 _& U; q; ^
3. Action中如何访问Servlet API4 r' U$ m! M! \5 U' `
1)
. @9 D* {7 T- k/ i+ T* iHttpServletRequest request = ServletActionContext.getRequest();7 ^5 C4 `5 a; r* F" m" Y" H& @( s
HttpServletResponse response = ServletActionContext.getResponse();
9 y3 X) L- K& \$ jServletContext application = ServletActionContext.getServletContext();$ P- S2 X6 W6 `) G
2)
( c2 b, D; D1 A) zAction实现了Aware接口,Struts2在初始化Action对象的时候会调用
! g! Q- D" y/ s& A' A `0 i' m. F相应的方法,通过参数传递需要的对象(request,response,appliaction...)
' x5 y, ^) G; e" w4 kAction只需要在该方法中持有该对象,例如:, o$ m1 ?8 T# A1 D3 I* c
public class BaseAction implements ServletRequestAware {9 Z* {! [( x5 G6 D/ [
protected HttpServletRequest request;
- C' I$ Z5 t& c5 t3 b. f. D) c
) ~. t4 l: r7 J& | /**
9 x& m; J: a+ C: \ * Struts2会调用该方法,传递request对象
5 R% N' `" u" r/ E" N$ q */
4 P& M" R" b: N+ ^* C5 Q public void setServletRequest(HttpServletRequest request) { j) t0 W: E( l
this.request = request;
) t# N& J0 W4 A3 g7 B% e }
; H/ G S( J' {}
( \4 H8 \9 a0 ?7 T* {
; _( W9 V5 s5 U* }6 ]! o. ~3 }4. Result组件基础
9 `; `/ M+ e5 E1 t! fResult组件负责将当前ValueStack中的数据以适当的格式输出给用户
% P) z Y5 m; w* e( I. y) E2 X不同的的Result针对不同的数据格式
/ K8 Z3 M; g# ?, i) j如果需要特殊的数据格式,可以自定义Result
" Q+ E& R4 k5 `' Vstruts2-json-plugin-2.1.8.1.jar
) U$ Q# U4 h0 A- c6 l
0 R2 k7 b9 | W3 @3 P9 K7 f! N9 B |
|