|
该用户从未签到
|
struts2 拦截器的配置; N h& v/ p8 q3 T$ Y% H
<package>
# R5 W3 {1 ~. M P4 |: [ <interceptors>! q0 w/ A' T* d
<!--声明拦截器,指明拦截器的实现类和名称-->* I# j! r" M9 M6 W! s
<interceptor name="one" class=""> ' F7 j, J6 x5 L' ^( U
<interceptor name="two" class=""> ( c/ [* `' j; f W
<interceptor name="three" class="">( R; T3 N+ Z9 h1 H4 S4 }* D# ?
... .... ....
: _6 l b7 l) ~8 a" H' U0 F' J <!--声明拦截器栈,用一个名称表示一组拦截器-->
# w c* G0 }% L+ U; \ <interceptor-stack name="all">% m3 B* |8 @) y" P* M G
<interceptor-ref name="one"/>; W) ?% m9 w3 G& k e
<interceptor-ref name="two"/>
/ G3 ]! l2 L3 N! w+ u* q P% b ... ... ...( d F/ H# t& ~8 p1 V5 D4 g9 o
</interceptor-stack>
$ G1 _3 h8 T1 O </interceptors>2 v- [, y+ n8 q0 A; T) F( `+ c
<!--1 A7 L, j: Z, j) X. e* w4 P- v4 v
默认引用的拦截器,如果该包中的Action没有引用拦截器. v2 L; _. k1 m: l7 [% S$ V
就使用此拦截器
Y$ s0 H5 G0 U! V7 E D -->
$ e/ ], g$ [- a <default-interceptor-ref name=""/>
! Z# H6 \. g2 l9 x <action name="" class="">* O# H k, y ?6 {7 y" R* u$ n
<!--- z0 w8 N& b2 r. c; c! o$ g: e* c
在Action中声明拦截器,在调用该Action之前+ y# l1 a% O3 @ M: u
会调用这些拦截器,如果声明了拦截器则会覆盖( w7 |$ M" q$ k3 m& B
default-interceptor-ref的设置
# X* ? [. y2 R. J --> ! k( B' q' H6 s
<interceptor-ref name=""/>
( k2 O5 _ [. k0 A3 {+ B$ ? <interceptor-ref name=""/>6 _8 |- R! s0 j
....% Y, E" b' L# f
<result name=""></result>& ^( O$ V, ]0 T. ?7 s- \
</action>5 I: u! e R& X) r, T3 Q( t
</package>' X2 e; J/ T1 c3 d0 f
3. 自定义拦截器' ~0 r; H* }8 w4 c2 I
实现Interceptor,实现其intercept5 n3 j5 _' O U! U7 Y: ]
public class FooInterceptor implements Interceptor {) m% z# n: `! Q% v. P! ?% M
... ... .../ n& D, q! K: \: R5 d
public String intercept(ActionInvocation actionInvocation) throws Exception {
& W0 S) {1 S7 y5 f( F // ActionInvocation封装了* c0 P6 L! Z" a
ValueStack vs = actionInvocation.getStack();
8 S T" r# m" W% e; _( l }
4 @6 J, Z& e U+ v4 H w3 s}
* {4 V/ |4 }) l% A6 v L* g3 y一般会涉及到:/ f8 L' r# I. l
1) ValueStack
* n C" S) [1 K3 kValueStack vs = actionInvocation.getStack();1 d& A$ N5 V9 a+ Z8 z; [. }' C
vs.setValue("ognl", obj);( a9 x6 s+ {/ o
vs.setValue("emp.name", "java");
; l2 g5 P! j% V; h+ R( K2)Servlet API# |2 l* S. F7 Q) l
ServletActionContext.getRequest();! ]& ~: x4 Y# _( @* b
ServletActionContext.getResponse();
9 ?4 C7 u' f) N$ y$ qServletActionContext.getServletContext()5 N4 J# P. U0 K. b9 n* L5 D8 p4 v
3)如何调用后续的Action(其他的Interceptor)5 D( R( D. z; B# w! a& `" d( ~
actionInvocation.invoke()
( y5 z# d7 l3 \$ DAction调用后,Result调用,然后再调用拦截器后续的部分# N( \6 q# q% c, L6 W5 ?/ R) r& |
拦截器无法决定返回何种Result
5 Q, q+ @# X8 V8 h( Z不调用
8 h6 g% U7 h$ s6 R由拦截器的intercept方法的返回值来决定返回何种Result6 Y- o9 O9 \ {: h R% w
actionInvocation.invokeActionOnly()
0 w& l5 S) }- W5 @, K* K. \( m只调用Action(不调用Result以及后续拦截器)
5 W% b3 N* Y' t& b: S: R由拦截器的intercept方法的返回值来决定返回何种Result+ T& g: n7 l1 S( e' J g7 i+ l
8 E' G' a/ O2 U/ ]8 p
|
|