该用户从未签到
|
1. Action组件
- f: f( ?( k; M- c1) 每次请求struts2会创建一个Action对象,不需要线程安全/ C- C T# @* E) S7 i+ W
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶! I; D6 s m4 v f: P p
可以通过OGNL表达式对当前的Action对象的属性进行访问
+ v) O' } g6 x' {) N3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
0 w Y m1 N0 w0 `- u Action的执行方法:调用业务层,根据输入计算输出5 T, [1 X* Y7 S( @9 T/ B- I/ R+ ?
* E8 a# ]9 `0 @- G, X' r
2. Action的配置0 P" V! a/ H2 r
1) 基本配置 , @* l8 I- V9 }. ?, C
<action name="" class="" method="">
1 M. }( [, w g2 i8 f7 M5 ^+ M</action>
# M1 D2 O+ V% M2) method默认为execute; class默认为ActionSupport/ M( m' [! g% U8 \
可以更改class的默认值:: V r# K9 b' h. F9 U
<default-class-ref class="com.tarena.tts.action.BaseAction" />4 s0 B* O, A/ b* [; b7 ]4 F( W% I& o& @
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
6 ~# `! O: J3 _: J G! D 这样可以控制Action的粒度+ O! a! y) d; J4 W! }1 n4 U% m/ @. x
<action name="action1" class="com.tarena.tts.action.FooAction"
; e3 Y H; a. T; h) n- ?% Q. p method="one">
% R9 Z X, }9 g1 E! K- _</action>+ m. D$ r5 T/ t8 Y7 M' X
<action name="action2" class="com.tarena.tts.action.FooAction"
# B& Q( I9 h( a9 E: V3 l method="two">
9 t* L6 \& }: s: z/ K' Z1 k/ T</action>
5 |; q3 j# p( [- u2 b4) Action的配置name属性可以使用通配符: "*") z) j( d3 \) r9 t2 @
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
* `! W* M% z5 h0 c/ T: ` <result name="success">/WEB-INF/jsp/{3}.jsp</result>6 s0 O& c0 h4 c1 A R8 a6 i
</action> I- u. Z0 ]- [5 |
3 h) ~7 T9 G6 ]+ m$ _5) Action可以被注入属性
% K1 {6 M% t! G8 F0 j0 b, ~<action name="goo" class="com.tarena.tts.action.GooAction">
, B G& P# Z4 h" E# k <param name="number">120</param>4 o6 T% H7 \+ k- ] {
</action>
0 o+ m3 p( x' [" l- R# z2 u/ _& @: n9 A! v: o
6) 可以修改默认的后缀
5 A1 t; I. z9 k<constant name="struts.action.extension" value="action" />* F- ~: j% X7 S# l3 o
# J( r# X) m8 L9 j3. Action中如何访问Servlet API
9 i' S6 [+ ?& a+ A0 _' @9 Y1)
$ W j1 I! X* ], B" IHttpServletRequest request = ServletActionContext.getRequest();
5 O& B" d& D9 D! t4 v9 s) tHttpServletResponse response = ServletActionContext.getResponse();
( R; n) L: X# [$ U/ wServletContext application = ServletActionContext.getServletContext();0 v3 }+ m$ ~' H. R
2)
' E" `" S4 G2 FAction实现了Aware接口,Struts2在初始化Action对象的时候会调用
& x1 m4 S7 `2 E: m- q相应的方法,通过参数传递需要的对象(request,response,appliaction...)( u- j3 Z. s& Y* w
Action只需要在该方法中持有该对象,例如: F. h9 F. V! T. i
public class BaseAction implements ServletRequestAware {2 ?5 u, W& d( ]
protected HttpServletRequest request;* K# v) v' J+ {2 N: G5 G
9 L% K1 @7 ?" z2 w8 z8 R
/**
) \9 x- I% U5 q) Z* T1 V- u' R * Struts2会调用该方法,传递request对象4 A- |) z8 J: ]0 Z5 G# W( C! _, J) Z
*/! n2 Z2 ^, q V, U
public void setServletRequest(HttpServletRequest request) {) z- f2 Q y5 R) F( K% [, E9 C
this.request = request;
, I; n- s2 B; E6 s }
X$ u+ ^4 J. \; V/ s}
& G+ F! j* a: ^7 s% P0 ]6 j, M% |7 t N1 a9 k0 d1 [
4. Result组件基础
2 v1 O$ R( ^8 l/ ^$ O2 eResult组件负责将当前ValueStack中的数据以适当的格式输出给用户. a6 S" y1 @* Q# c
不同的的Result针对不同的数据格式+ R$ D# b! [2 y% `6 T. v
如果需要特殊的数据格式,可以自定义Result
: z8 k' k2 @( _; P* V/ Z$ pstruts2-json-plugin-2.1.8.1.jar$ _- C8 J* d8 z3 z
( w. Q% _& C+ O0 P9 B f
; w) F7 h) t- ^ ]# I |
|