|
该用户从未签到
|
1. Action组件( W3 O8 O& V% W3 l$ G
1) 每次请求struts2会创建一个Action对象,不需要线程安全. k% Q8 o: |' P2 ?
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶- H: t# }- Y1 e
可以通过OGNL表达式对当前的Action对象的属性进行访问: K T& I+ e; g& D9 d
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
- ]8 m, C! q, V. I; o; X2 l' _ Action的执行方法:调用业务层,根据输入计算输出
5 \8 S2 b" b _1 P% D; f7 V/ [
/ _. y& f ] B+ @/ N9 Z2. Action的配置
4 e9 d8 I, }8 p2 n1) 基本配置
4 _. V1 Z) {; `4 a<action name="" class="" method=""># h8 U& e2 Z* I2 b. w
</action>) r" P5 l1 M4 D# @0 _. m
2) method默认为execute; class默认为ActionSupport0 D7 W1 z& y( W' z5 _: `) s
可以更改class的默认值:- b# |& T1 L5 O" G8 j0 Y
<default-class-ref class="com.tarena.tts.action.BaseAction" />
/ n; @% G; X2 E1 j4 M6 f3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
) G ^) [' t0 q6 c 这样可以控制Action的粒度
4 q+ i% @, b) j" s<action name="action1" class="com.tarena.tts.action.FooAction"6 Q0 A5 Q. P; D: Z! Y
method="one">
0 Q$ F) G0 M1 I</action>& J# @: W9 c" p3 r% V% g! A4 b+ n+ A
<action name="action2" class="com.tarena.tts.action.FooAction"
7 D- b# p$ ?$ R6 n. y method="two">' D8 L* L9 _% c! ~8 m
</action>
! {* }1 O# I( a" D4) Action的配置name属性可以使用通配符: "*", k* l6 A2 c! V: T
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">: h2 \- _$ g z) y6 K) r! f9 h: J
<result name="success">/WEB-INF/jsp/{3}.jsp</result>, i" f3 O7 C ]% ]0 n: A9 b
</action>- m# V$ q) L3 T" g
$ i9 Z1 y+ _6 q& z& t: s
5) Action可以被注入属性
3 C4 z3 e9 C: Y) X6 k<action name="goo" class="com.tarena.tts.action.GooAction">
l: W' G1 ?! _, J) d7 v <param name="number">120</param>: u5 v/ I3 B& a2 R
</action>- J* {* H2 T# J
8 ^6 W& l" P) @: U2 j) e6) 可以修改默认的后缀4 G8 `- E- j( J! [8 A) v
<constant name="struts.action.extension" value="action" />. k4 B1 S' Y6 {' e& D/ Z3 ~$ E
2 b4 Q( E* D& N1 [' t6 N" F3. Action中如何访问Servlet API
. O% g, q* L U' d$ K9 ?1) 7 X" E4 N) F0 v
HttpServletRequest request = ServletActionContext.getRequest();
3 `6 o' {- w0 U- t hHttpServletResponse response = ServletActionContext.getResponse();* }! C& W% y3 `6 N- R1 F
ServletContext application = ServletActionContext.getServletContext();
+ P8 t1 S$ o1 ~/ o2)+ f5 p2 x: j! o0 Q% E6 o( E& t
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
; L% E# T% i5 V1 S* a+ n相应的方法,通过参数传递需要的对象(request,response,appliaction...)3 e+ i/ i7 ~7 Z: i# Q& q K: K$ j
Action只需要在该方法中持有该对象,例如:) E* K+ E9 K, v' t
public class BaseAction implements ServletRequestAware {
" Q- D b1 s( U# y5 `. j0 q protected HttpServletRequest request;! r) j; l0 `1 @+ Y, G
4 n+ ]9 `1 [& k0 a3 `3 [8 t! K
/**) a, J9 P7 f/ ?7 V( k, F* p
* Struts2会调用该方法,传递request对象
4 q ~1 g6 x. @9 S2 \+ g */' B) i/ c6 {9 o0 o% l- `
public void setServletRequest(HttpServletRequest request) {& l' M9 b$ z5 s$ i
this.request = request;
/ z2 R7 f5 Z! I4 o j }( }1 a; ]" [3 x+ h# F( i
}9 ~9 ^0 ~4 A5 } K1 f
- h: |4 {% h' k- C- L
4. Result组件基础
9 w1 L9 I6 {0 KResult组件负责将当前ValueStack中的数据以适当的格式输出给用户; ^ i& Y1 t$ P) _# v; E
不同的的Result针对不同的数据格式
3 K& X% m# P7 Y8 w2 H3 f2 c! a如果需要特殊的数据格式,可以自定义Result0 {9 P8 E" }; _) W5 S1 k
struts2-json-plugin-2.1.8.1.jar
# w, U" B6 c; @" r) [. r% }4 P) @0 ~. y/ u: {0 [
|
|