该用户从未签到
|
1. Action组件
$ }6 ^. q; i- f' }' j1) 每次请求struts2会创建一个Action对象,不需要线程安全0 Y6 ]# ?1 Y l
2) Action对象会被置于当前的ValueStack的CompundRoot的栈顶
5 I0 v. p, R1 y* F v+ F 可以通过OGNL表达式对当前的Action对象的属性进行访问* f0 T( `! b) G) a/ R7 A, X2 }7 \ ?
3) Action的属性可以用于接收用户的输入;也可以封装对用户的输出$ L& P; B. |- K# S, F5 V# v# O9 ~
Action的执行方法:调用业务层,根据输入计算输出6 @6 @& N; H$ H& P5 a4 D; ?
$ z/ d9 R/ o& D; ]2 n3 `4 y
2. Action的配置
" p L/ S# c/ e0 y; i* e1) 基本配置 * i1 p- @, H$ R* u7 T! W: a2 N
<action name="" class="" method="">
" z4 q2 E: u6 z8 f3 B</action>
* u" b8 Y& B# G: K2) method默认为execute; class默认为ActionSupport9 S/ C Q* ]+ l& J0 S" | Z
可以更改class的默认值:+ A2 U% F5 v3 n% f. T: f
<default-class-ref class="com.tarena.tts.action.BaseAction" />1 V0 R" J! t+ m/ f2 R7 N0 g' f' p
3) 可以实现多个Action配置共用一个Action类,但调用不同的方法
& g+ O; J7 H5 P) Y6 L 这样可以控制Action的粒度
9 d. u, d* `) h) k" N8 _# f; Y<action name="action1" class="com.tarena.tts.action.FooAction". Z. f: B7 R3 T. p0 l
method="one">
; L# T3 {+ D4 H</action>
8 _6 Z ~/ J; H<action name="action2" class="com.tarena.tts.action.FooAction"
; d, e9 C: Z7 m3 ?% K V9 V8 A9 B6 R method="two">3 h3 ]1 ]) i# {
</action>7 O& ?, c' _5 u; ]5 F; r8 q" Q5 M
4) Action的配置name属性可以使用通配符: "*"
6 T; a1 ]1 u! u<action name="*-*-*" class="com.tarena.tts.action.{1}Action" method="{2}">8 S) S& l( Z$ |$ h
<result name="success">/WEB-INF/jsp/{3}.jsp</result>' |: O! S3 c. Y! Q7 W; i
</action>
! ^. v7 V* {- a& A B3 h; \" y/ v1 [7 V
5) Action可以被注入属性$ Z2 O+ x/ u6 A% c
<action name="goo" class="com.tarena.tts.action.GooAction">6 T, t! o+ R8 ]
<param name="number">120</param>
) v, o- C Z1 R</action>/ T7 n) c3 G1 k
3 W9 ^* `* M; s+ Y/ E& ?9 X6) 可以修改默认的后缀2 {, j% ~' W/ D7 N' J, `, P
<constant name="struts.action.extension" value="action" />2 n1 i+ V2 L& N" l6 E4 F9 F
6 t) w1 Z7 x7 g7 L. \* ^$ K
3. Action中如何访问Servlet API8 X ]6 O5 y2 ?, W
1)
M( u; J3 b3 U; P8 x; \HttpServletRequest request = ServletActionContext.getRequest();6 t, `3 t. h$ V- j0 `; _( T
HttpServletResponse response = ServletActionContext.getResponse();
% n8 N# c0 T( K2 g) U* X* }/ I! g" FServletContext application = ServletActionContext.getServletContext();
0 W5 |, p- ?6 w1 w5 R; ?% F Q2)# R, O, j4 k. z: V( X5 ?
Action实现了Aware接口,Struts2在初始化Action对象的时候会调用
+ |$ o* L0 ], V& b: p) v相应的方法,通过参数传递需要的对象(request,response,appliaction...)
) s) T$ a" H" s6 L. LAction只需要在该方法中持有该对象,例如:. Y/ z: }3 @5 S8 N0 N, b, W
public class BaseAction implements ServletRequestAware {
. C/ @9 B8 K. [3 ~ v0 U1 W$ A- q) u protected HttpServletRequest request;& l& H, E* E( ^) k* @% R1 d; X7 f
8 f, T S& J: |; E5 P! ^* Q% Z& t' C /**3 k; W' b/ H( D6 [1 ~7 b; U
* Struts2会调用该方法,传递request对象 l$ V# ?: \3 r
*/
+ w; X) P( ?, P7 b4 r' v5 u8 h public void setServletRequest(HttpServletRequest request) {* d0 ]: h6 @+ w" b! p) S
this.request = request;" d( s& t3 l% S- R6 F' e) I
}
# v1 M/ s9 w! i& h0 I}( x; D6 r* b; \4 n1 k: ~
; B8 @- {( ?. F% x4. Result组件基础
6 ]" r1 z, x7 S1 n- ?6 _Result组件负责将当前ValueStack中的数据以适当的格式输出给用户) V' g. |5 b9 h" F
不同的的Result针对不同的数据格式$ N8 V# t4 i! V7 }$ Q: n
如果需要特殊的数据格式,可以自定义Result4 W# M% @$ d# V6 R1 S
struts2-json-plugin-2.1.8.1.jar; R! }$ J s3 X$ E( k) s
. V6 Z, V% p$ ?- e" t" |9 q$ `1 H, r( _' F2 S& q- F3 R
|
|