该用户从未签到
|
1. Action组件/ [$ r {% w# K- \, o5 m0 Q, U) z
1) 每次请求struts2会创建一个Action对象,不需要线程安全
1 p3 a- r t( s' @% Q2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
f2 N+ j- c% s1 } 可以通过OGNL表达式对当前的Action对象的属性进行访问
* J% n& p* v" r; B- S3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
1 O/ I2 t. K2 J8 @6 h* I Action的执行方法:调用业务层,根据输入计算输出- R- h5 c5 J Y ~# Q* I
/ r2 P6 `( ]0 B2. Action的配置
0 L+ H, q7 P/ g4 ^; D- T1) 基本配置 6 N- h% e- p4 ?; H2 `; p6 T' d+ d$ i& C z
<action name="" class="" method="">
+ t; X' k0 {! Y& s</action>' ~4 b( O# h6 N% q/ t
2) method默认为execute; class默认为ActionSupport9 @* M; _7 k% x3 C
可以更改class的默认值:8 @& _3 {+ ~$ |/ d' {
<default-class-ref class="com.tarena.tts.action.BaseAction" /># ~2 y" A4 Z3 H& O) J
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法- x: b- x4 G6 X* {- h+ @
这样可以控制Action的粒度& C/ v/ z( g4 I4 o% W C
<action name="action1" class="com.tarena.tts.action.FooAction"9 b3 k+ B7 A" G0 u& L
method="one">2 V1 h4 x$ u& M* @# v
</action>* g& K& Y. Z' f4 d7 B' [
<action name="action2" class="com.tarena.tts.action.FooAction"
( I! z6 J- B+ f+ I method="two">' G/ A$ [, j& `% E) h5 S
</action>
5 H% Y0 v% b0 o4) Action的配置name属性可以使用通配符: "*"( x( ^. A4 R+ d+ O! D1 L% N/ }& l0 ]) j
<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">
3 ?( p2 W( @$ Y# }$ ?5 C <result name="success">/WEB-INF/jsp/{3}.jsp</result>
) y( [9 q9 V6 Y! z; M- K# G</action>
. u8 {* i( a8 [5 p3 \/ h! I( y O6 h6 d& H, x
5) Action可以被注入属性% R+ Z+ h3 C4 n9 g2 T# _
<action name="goo" class="com.tarena.tts.action.GooAction">
1 X, i) ?; p) J <param name="number">120</param>
1 ~7 s7 K/ e7 M1 K: ^) z</action>* a7 U+ H: b- e- g; }
9 x5 p. r& g0 T7 \7 K3 G" d
6) 可以修改默认的后缀
( |( D" S& `8 E; ?3 ~! I [<constant name="struts.action.extension" value="action" />2 g( W* ]/ C1 J/ l/ J) w
0 n1 I6 {, B. b# M$ x" m! N3. Action中如何访问Servlet API* M+ n, U3 {5 P. r. @ p& b. v
1) $ { T6 r1 |! F
HttpServletRequest request = ServletActionContext.getRequest();% w# c5 S8 G) ^- d; x8 |4 a* e
HttpServletResponse response = ServletActionContext.getResponse();4 v$ ~1 z% P/ R! X# _' a* b" B
ServletContext application = ServletActionContext.getServletContext();% {$ ?5 n# g+ ^6 X) G( x8 F* c% ?4 `9 o
2)) j; r- t& _; C$ {- M
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
4 T5 Y* q* ]+ i$ t$ O1 b相应的方法,通过参数传递需要的对象(request,response,appliaction...)& p5 J# Y1 q7 u0 }9 j0 \: A) F
Action只需要在该方法中持有该对象,例如:
7 T, r$ h; b" z- s' ~ U. b% K3 W' Jpublic class BaseAction implements ServletRequestAware {
$ Q& P6 w8 a9 Y2 a h8 X protected HttpServletRequest request;
* t$ {6 `4 r- C% V/ v ' ~8 T# L7 Q. C- A+ P
/**/ ~1 l: d {" J4 w' E# n
* Struts2会调用该方法,传递request对象
0 i" |* z+ o6 R4 p */
; W$ x5 {, b0 E7 ~ public void setServletRequest(HttpServletRequest request) {
2 ~' h2 O, u. U# R4 s this.request = request;
- L3 s3 E7 i" H: s; ] }- D: o9 S9 u3 S Z$ Y1 U. P& m/ S1 i9 Y
}6 K) o! k! K% N: r/ u, a( [9 K
$ t6 l; Y- `. `- t. q K" ?* I4. Result组件基础
4 l) {* c; ^7 ^: A$ C" N! jResult组件负责将当前ValueStack中的数据以适当的格式输出给用户
4 h* G: e! i$ y1 _6 Y6 h不同的的Result针对不同的数据格式
1 b/ N0 Y$ ?' Y6 I- c* I( T* }如果需要特殊的数据格式,可以自定义Result, z* _4 w7 l% H
struts2-json-plugin-2.1.8.1.jar' T/ M, R! F7 W; N* C0 O' p
1 I8 R3 C/ x: s4 y, B/ t |
|