|
该用户从未签到
|
1. Action组件 Q8 V- O) q9 u& k. o
1) 每次请求struts2会创建一个Action对象,不需要线程安全. I% l9 Y1 G/ w, X
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶9 \( ^7 k" \& w8 e# ]
可以通过OGNL表达式对当前的Action对象的属性进行访问
; c4 e; Y3 N/ F3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
6 Q. j% a x9 l+ k" w3 S" D# `3 H6 J4 J Action的执行方法:调用业务层,根据输入计算输出$ G; ~3 R# U5 {. R/ B0 l
0 r: {6 s2 |: @) O$ U8 v2. Action的配置, a4 o1 Y x: e/ C! {* |
1) 基本配置
6 c$ M) U( L% g( k1 g, Z<action name="" class="" method="">
% m9 X3 ?6 h% C$ _3 @</action>
# X$ U) a7 Z: v: Z6 h2) method默认为execute; class默认为ActionSupport
: h3 ]6 N0 t; ^# Y% B6 H 可以更改class的默认值:, |: P- ?! G7 p
<default-class-ref class="com.tarena.tts.action.BaseAction" />+ ?" U" k* {. r. b
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
- `- a9 r" u- F 这样可以控制Action的粒度* _7 A8 ?3 `% N& s y' i' @
<action name="action1" class="com.tarena.tts.action.FooAction"
2 e2 E7 O2 e+ j" }/ k method="one">/ u0 \! p* `7 P
</action>
% P3 o5 d* u- I! y3 N( R<action name="action2" class="com.tarena.tts.action.FooAction"1 ^, N. {9 ^$ H, @: @
method="two">/ y" N2 }8 j- M: B
</action>! t0 n; [# R) A
4) Action的配置name属性可以使用通配符: "*") d, |! ^8 n, [/ n2 C
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
- X- G' A: i6 U <result name="success">/WEB-INF/jsp/{3}.jsp</result>
1 r6 t0 H- a- n1 I8 J</action>
$ \& ^# T: P U+ N2 h! D R$ K0 J- G1 A; X' O
5) Action可以被注入属性
5 ~" s2 S6 H$ ?8 I# z5 u7 x<action name="goo" class="com.tarena.tts.action.GooAction">4 m& a% a2 x+ ?" g/ d
<param name="number">120</param>
: Y' r/ C: E# @0 ]4 M</action>& u% P1 r, H1 C1 @. I' ?
1 M4 s3 `* p V5 \0 z( B
6) 可以修改默认的后缀
- a% ~3 P3 e& i9 W<constant name="struts.action.extension" value="action" />' E! @2 Q* N2 F }
. {: T4 U# D$ d5 ~
3. Action中如何访问Servlet API
3 c4 t- o4 c5 R' O1)
, w5 P5 _2 |' |4 b, [ ^: h$ HHttpServletRequest request = ServletActionContext.getRequest();
( g! \+ ~# F$ A" }( RHttpServletResponse response = ServletActionContext.getResponse();5 g" }! m j5 ]3 E: { n* F9 U
ServletContext application = ServletActionContext.getServletContext();
2 w6 H; q/ e o! }2)1 X( Z2 C+ @% Y9 O8 ?
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
$ q, ~. N0 {4 ~* G* J8 ^4 v相应的方法,通过参数传递需要的对象(request,response,appliaction...)
3 Z$ e4 j. z/ P$ Y6 g; xAction只需要在该方法中持有该对象,例如:
) D1 E1 h& H* x( M+ w/ P/ dpublic class BaseAction implements ServletRequestAware {6 T8 V' p- H) [2 O0 P
protected HttpServletRequest request;
/ p8 x- w, Q9 ?$ z+ C6 W N ' P! ]$ ?3 y! n7 N$ l" X& B4 a0 |
/**
% Z+ [9 k; J* [ o3 ^( M * Struts2会调用该方法,传递request对象
* {; m, I* V- \: z2 t */+ c" e4 [2 l+ Z5 I! k3 `7 A; Y4 R
public void setServletRequest(HttpServletRequest request) {0 i0 e/ c; e. e: q& w' K1 g0 @% i
this.request = request;
2 T% Q4 T0 t# \9 B }
* l) g. T' h% w p}4 i. T9 ^& X# b1 `- D) Y( q' U+ I
1 [! W8 B$ u: D; B0 s2 O; X* c( ~) a
4. Result组件基础& Z6 e- G0 c' l; ^
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户
$ M. a9 M$ ~+ \, [/ X不同的的Result针对不同的数据格式6 Y8 T5 U7 w, f5 ^2 N) J
如果需要特殊的数据格式,可以自定义Result& q. \! l! C8 _+ z% V
struts2-json-plugin-2.1.8.1.jar7 B: M3 V7 J6 f
+ j# A& D8 y1 ^7 h: E
|
|