该用户从未签到
|
struts2 拦截器的配置
$ L2 G# o' M# J2 Q% `: N2 o9 Y4 A<package>0 k k% T0 k& M' Y% r
<interceptors>, B g: ]: e8 d* n% Y! {
<!--声明拦截器,指明拦截器的实现类和名称-->+ s7 T5 b9 W+ O& I7 O
<interceptor name="one" class="">
. |. A% w! c# N <interceptor name="two" class="">
9 r8 k* E1 U4 h. c2 z& I- [ <interceptor name="three" class="">9 P: U1 T% I `# v9 E9 c6 f/ k
... .... .... j9 v( W0 T& g) c) z; W9 a5 P7 V
<!--声明拦截器栈,用一个名称表示一组拦截器-->
Q3 F. n; Z Y <interceptor-stack name="all">
" u( x1 x: ]5 c- V% M <interceptor-ref name="one"/>
( Q. Z/ L3 E2 m+ z+ F( Y' @1 \ <interceptor-ref name="two"/>
1 h, Y/ b4 l; O0 s ... ... ...
9 E0 G2 t3 T: V# r </interceptor-stack>
& H3 P2 t" Q& L+ G% |5 \ </interceptors>
6 f( Q8 x/ c/ x4 n6 X <!--* N# v# ]4 S; Q7 Q
默认引用的拦截器,如果该包中的Action没有引用拦截器9 [7 v- R9 U! y+ D' }2 c
就使用此拦截器 % G8 l* c; |: R- q3 l# I) b: m5 R
--> 6 x" C; z2 e% M& |) P
<default-interceptor-ref name=""/>8 k! H. `% ~, h/ d* l
<action name="" class="">- x" \7 q+ Q4 r
<!--
& n) B: L# P" I" a/ w8 r 在Action中声明拦截器,在调用该Action之前$ A# @+ ] H7 K. O2 [, q! [
会调用这些拦截器,如果声明了拦截器则会覆盖
3 A- G" p3 t. | default-interceptor-ref的设置
8 Z9 c* u Q) c" M* I --> : m7 J4 F6 D# c' e
<interceptor-ref name=""/>
. O- p" Y8 `5 C, M' B4 j* q <interceptor-ref name=""/>
8 _) Y0 r. b. X* V$ K9 K1 L ....
$ B2 F. b9 H' X0 D <result name=""></result>$ J7 k! l$ |3 j) ]
</action>
% G) A+ W% y& _! g- D: N: o</package>
; o' E. i$ g0 D( y3. 自定义拦截器2 C9 Q o8 a1 d/ h; r
实现Interceptor,实现其intercept
9 M8 H8 k# L Z% m- t/ b; h- Gpublic class FooInterceptor implements Interceptor {( r+ Q8 r' g+ d/ g+ M8 D
... ... ...
2 n2 f& N) b% j6 I public String intercept(ActionInvocation actionInvocation) throws Exception {
# n& V6 } k6 W2 j* A // ActionInvocation封装了( a. O9 A) U5 G/ j0 v: g' ~0 w7 ]% e: |
ValueStack vs = actionInvocation.getStack();+ ~: B- g+ z# z m* {1 m
}
2 H' M7 Q2 n! P+ w2 v}
; J' T8 l; K7 e0 ?; ^. l( }: Z一般会涉及到:: W% y5 `, M0 u; e: c
1) ValueStack+ b) R0 t9 z! \) d
ValueStack vs = actionInvocation.getStack();; m0 l7 [$ G0 B/ l/ c/ k
vs.setValue("ognl", obj);" F1 @9 a8 N, C* B
vs.setValue("emp.name", "java");
9 J& {" q& O! ?, Z8 q2 J2)Servlet API' a1 k( i% b* V) r! j
ServletActionContext.getRequest();# D) C/ R; N" J* U+ s
ServletActionContext.getResponse();; O6 ]% `1 T; n* }/ ~) v
ServletActionContext.getServletContext()
I! X* R: d' G0 h2 U3)如何调用后续的Action(其他的Interceptor)- |1 u% k: a9 B. I2 Q
actionInvocation.invoke()/ k) J- {# U/ B& s8 \8 N* y9 l6 k
Action调用后,Result调用,然后再调用拦截器后续的部分
, t( n2 G5 k! v- G* `" b5 K% g拦截器无法决定返回何种Result
( [4 }; s: q1 P& S. q不调用
3 t3 J. v, H( o1 m3 I7 B7 B9 `由拦截器的intercept方法的返回值来决定返回何种Result
) c! x' x1 n' N2 P6 PactionInvocation.invokeActionOnly()
9 g4 ?, b7 d# F: Y只调用Action(不调用Result以及后续拦截器)0 n! [8 k2 k0 V
由拦截器的intercept方法的返回值来决定返回何种Result
3 I& H5 H* ` X7 M2 |7 L* e$ A; \* o& F7 m. J$ }
|
|