该用户从未签到
|
1. Action组件, i4 d6 C o& _" ^. m+ E
1) 每次请求struts2会创建一个Action对象,不需要线程安全
- g! x& g0 H3 T ]4 m5 W+ A2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
3 p2 U' Q8 N1 @6 d4 t/ R 可以通过OGNL表达式对当前的Action对象的属性进行访问: T5 f/ j; j6 q* C
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
( V; K/ E; I8 \4 p& K Action的执行方法:调用业务层,根据输入计算输出
4 G3 }2 X! ]6 C% p+ K c7 i
) y x2 h/ @$ q8 A+ u7 m3 \2. Action的配置
( U6 `1 {0 |4 L4 f }% @# O) q9 ]; z" B1) 基本配置 7 v1 x( L$ I# h2 H! n- Z9 m: D
<action name="" class="" method="">
: U) S0 I" h Q* S! R. ^. I</action>
# t4 ^. D' W, G& ]/ \+ d2) method默认为execute; class默认为ActionSupport. X( o7 C. G( C' C
可以更改class的默认值:2 q* `; K2 P4 s/ d
<default-class-ref class="com.tarena.tts.action.BaseAction" />
) o) [3 g8 S% e3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
' W( L. H/ ? _4 y" u |$ U7 O 这样可以控制Action的粒度
6 A/ A. ^8 R* V9 {" p6 T T<action name="action1" class="com.tarena.tts.action.FooAction"" j/ J% d+ ]# b7 l
method="one">1 s4 X* Q5 Z1 V9 p4 B+ g$ `
</action>: G* J" ^' i: j/ ?% k' n
<action name="action2" class="com.tarena.tts.action.FooAction"
( r6 [# ~$ Y5 M; r method="two">
# X1 L/ ^" U) t9 ?</action>
- K3 e4 x8 k7 p( w5 A9 R3 O4) Action的配置name属性可以使用通配符: "*"$ R# _4 Z$ M( [% [! \$ W
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
' T: ?2 q3 a& E8 H S; j# z <result name="success">/WEB-INF/jsp/{3}.jsp</result>
7 J3 o& o/ ?8 M8 s# q$ g</action>
; r+ k) Z/ K4 s3 o! \: i$ Q* u7 q) C
5) Action可以被注入属性
S6 g W6 z$ M<action name="goo" class="com.tarena.tts.action.GooAction">4 ]8 e& Z/ I! L+ F& z& ^
<param name="number">120</param>
- f9 K9 X+ D( p" U1 z1 Z</action>/ {0 D( X* H( c
[! |4 Z# m! F x* S' K
6) 可以修改默认的后缀
+ g" Y* q- a6 c7 W<constant name="struts.action.extension" value="action" />1 {+ Q' g* N6 ?5 r
9 o& t& y& `; y+ p- H8 D3. Action中如何访问Servlet API
4 P7 D' E( d+ e6 W1) ) f9 X2 r) O [+ i
HttpServletRequest request = ServletActionContext.getRequest();& K! a, L* H1 b7 V5 F$ B
HttpServletResponse response = ServletActionContext.getResponse();
( T3 a7 M; c# x; l/ u: cServletContext application = ServletActionContext.getServletContext();" ]3 @/ I0 F# {/ |, w |4 N
2)! s+ \- ?8 ^* d4 z9 |' `& M
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用, j9 k* @) _* u9 h
相应的方法,通过参数传递需要的对象(request,response,appliaction...)# m; h- `3 C# U( d8 u
Action只需要在该方法中持有该对象,例如:
* V( ]' _0 N; A1 w3 H+ {0 qpublic class BaseAction implements ServletRequestAware {
9 I% ^. k8 d& \' a6 t. I& @! B! H protected HttpServletRequest request;
2 y- p( B" n1 Y: i' V% b4 t4 E3 A b
' e8 i% |7 e3 R- i p /**
6 b$ ]: P9 i, n; y0 F * Struts2会调用该方法,传递request对象8 J; C5 ^& A& D8 J6 p
*/% { M5 N/ F1 K9 x4 Z: R9 E9 z$ K
public void setServletRequest(HttpServletRequest request) {( I3 p$ W; U/ w, I h
this.request = request;4 n# r/ ~; L9 s7 t5 _
}
8 y5 `7 f6 r8 h* ^}
2 f! M1 T) p2 w. J: [0 Y1 v2 q# S: w$ K& `8 _$ ]' d) c
4. Result组件基础7 q/ G% r3 s- g/ W
Result组件负责将当前ValueStack中的数据以适当的格式输出给用户 o& c# C" b+ S/ u9 x5 m
不同的的Result针对不同的数据格式
4 U& \9 V: R' H如果需要特殊的数据格式,可以自定义Result! }3 s' U/ S, z( x8 ~9 p* G
struts2-json-plugin-2.1.8.1.jar
( l. V5 j! n* e1 y5 U9 n+ M h/ r
|
|