该用户从未签到
|
1. Action组件
2 `8 V/ ~7 W Y* V2 j; W3 Y1) 每次请求struts2会创建一个Action对象,不需要线程安全
" T" p' K- y2 c9 T" d# R [ k5 i2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶6 W3 d) `" @* A- m1 _
可以通过OGNL表达式对当前的Action对象的属性进行访问, m% a" n m8 B9 j- k( O
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出
. ~$ y% ^8 Q# I Action的执行方法:调用业务层,根据输入计算输出
" Q- P- L" e& \8 I) n$ z+ b$ W) G! H0 i. n/ w# M
2. Action的配置
7 r, x( J' O% R9 l: s X1) 基本配置 . s$ T# H" K4 b6 k9 R6 `
<action name="" class="" method="">
( j' D& m( d+ C6 \3 Y</action>4 D& ?$ e3 j, \8 a% v0 q/ l
2) method默认为execute; class默认为ActionSupport; W9 g$ b% q0 |* R0 T M1 L
可以更改class的默认值:" ]9 T, h* {' m: ~
<default-class-ref class="com.tarena.tts.action.BaseAction" />
* U) k, B( |( l; y( O) {$ d3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
# n# h) K# T( j8 r. \ 这样可以控制Action的粒度- G7 I9 K! _8 w
<action name="action1" class="com.tarena.tts.action.FooAction"- j+ H& l, K; e$ Y$ g
method="one">
( n, x8 \" p/ S7 S* i% u</action>/ N& ^/ i6 g# Y4 z3 g% z. b S
<action name="action2" class="com.tarena.tts.action.FooAction"! _- z1 M! z: M" f. |( |. q
method="two">9 Z; {5 P5 I% k0 O( x- s6 @' ]
</action>
5 _# @. G4 `6 h4 H" n7 m# S4) Action的配置name属性可以使用通配符: "*"
! f3 ? w* H4 ~/ S( X" q' t& Q- f<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">, ~; U; Q# g% o& \. D- ]
<result name="success">/WEB-INF/jsp/{3}.jsp</result>
' j/ z# R" i( Q</action>" {4 M' n( A }* w) q" ~& Y* Y
" ]' a; K+ n7 A
5) Action可以被注入属性- x) } s) z; r1 e
<action name="goo" class="com.tarena.tts.action.GooAction">! W; n8 i8 T* r$ Q/ f
<param name="number">120</param>, H$ a$ B* B/ I! O" M3 L5 e
</action>+ }. F5 d8 w9 c
: {, p5 ^$ E6 n% q& v6) 可以修改默认的后缀
$ o) J9 m4 @# h, O1 n<constant name="struts.action.extension" value="action" />
) |( d! C: k$ D' V6 @2 V$ {4 [$ F$ i; a. b
3. Action中如何访问Servlet API/ P1 N' r) ~# N$ n
1) 2 ~& s; b `) N8 o4 R
HttpServletRequest request = ServletActionContext.getRequest();
& }6 B. L# }8 X2 z( v- _3 o* p4 aHttpServletResponse response = ServletActionContext.getResponse();/ {+ ], b( t1 [% @! ?$ X
ServletContext application = ServletActionContext.getServletContext();. D* H1 f! f8 @ B; D
2)1 Q; M/ L! S( }$ F/ s& p3 I/ O$ N
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
6 K1 |% G+ C5 |( E相应的方法,通过参数传递需要的对象(request,response,appliaction...)
' g# g( |" ^6 }* |. I$ g6 t6 qAction只需要在该方法中持有该对象,例如:
0 U0 w1 S, K# j5 i# v8 wpublic class BaseAction implements ServletRequestAware {; A! l6 \! u* `* ?2 e
protected HttpServletRequest request;
7 X) o! ]2 a7 H9 \, C 2 a8 D' K& U. k, x4 U1 a, A( a# J
/**
7 g1 J. h* y" g * Struts2会调用该方法,传递request对象
7 n1 |( ~% `9 Z% d+ o */
* q, b" U" q5 g. \ public void setServletRequest(HttpServletRequest request) {
8 ?! i& `: m. O4 | this.request = request;
5 N* H" ~) u3 p& r$ P }) n' K( d1 z$ e
}
" y, \3 [, V. l" G3 _
9 r& { v6 U4 p. q: t7 r0 j/ l4. Result组件基础
. \, r* a* M; d6 `8 `' P2 cResult组件负责将当前ValueStack中的数据以适当的格式输出给用户, \) }/ @5 g! ?0 l9 r# e
不同的的Result针对不同的数据格式
, R5 J7 q" {( x0 d5 b" d如果需要特殊的数据格式,可以自定义Result" `* R( w3 ~2 d8 X4 I; i0 t* E
struts2-json-plugin-2.1.8.1.jar
9 M6 {/ M: t% Y% v( g# a7 m: b! p! z! w y5 ^, `
|
|