该用户从未签到
|
struts2 拦截器的配置
4 a0 u7 W% y( g. p2 c& m<package>
) r" S$ X9 n5 I0 J' l5 h. ?2 @ <interceptors>, Z3 r. S( `: l
<!--声明拦截器,指明拦截器的实现类和名称-->
* A. Y, h- g7 Q7 e' t <interceptor name="one" class=""> ( j8 S1 F$ b1 M; [( W. `. `
<interceptor name="two" class=""> + ?0 W, u2 x8 \9 v- O( n9 K
<interceptor name="three" class="">1 W6 b: I( U% V; S
... .... ....
f9 N5 W0 S2 A5 r5 } <!--声明拦截器栈,用一个名称表示一组拦截器-->
: k! [3 d/ y- N; k3 v+ K" t7 g <interceptor-stack name="all">0 [5 o5 X6 u0 _* p$ J3 T. i
<interceptor-ref name="one"/>
& y- K+ E2 y3 ]% k <interceptor-ref name="two"/>
5 v1 m' J6 i( [0 o- }. }/ `& V ... ... ...
# E4 _0 t R, d </interceptor-stack>
( H, J5 J& Q, \" z, d5 h </interceptors>
$ P' ]3 F; F: Z <!--
6 C M% R& s$ u1 U( @, e 默认引用的拦截器,如果该包中的Action没有引用拦截器
8 \% ^7 S8 ~8 Y+ X 就使用此拦截器 9 `3 ]2 h9 x3 a( b: L. G, D6 r
--> + X. j4 m0 C2 w5 }% z3 A: D
<default-interceptor-ref name=""/># i5 R% x5 f( T4 k! H
<action name="" class="">
D* a+ h. E! r7 j6 w$ k <!--( z7 w0 N {# T9 l9 f
在Action中声明拦截器,在调用该Action之前" E) s" j2 S: y5 a/ H
会调用这些拦截器,如果声明了拦截器则会覆盖6 a) Q8 [5 B: L1 g
default-interceptor-ref的设置
: P' W0 ~, t( W5 g p& M -->
7 D l0 y: f6 i0 G+ [( X, W! b <interceptor-ref name=""/>
; E. S1 `! C6 _& y& s <interceptor-ref name=""/>
]( J1 I6 `1 |5 _1 j! {; h6 o( a' Q ....
" t& k9 p# B p/ J3 N( r- E3 G <result name=""></result>% |& K: V' f& H( T
</action>% U4 M- }" u+ B/ a' f5 T
</package>% f+ W9 x$ w8 D3 Q
3. 自定义拦截器
* g% K( K# h/ G; U" j+ X. T" L实现Interceptor,实现其intercept- o$ s2 s7 a: ]' b
public class FooInterceptor implements Interceptor {% ]1 S0 [" v0 `# m5 m4 g
... ... ...: U: f: ~7 `7 h
public String intercept(ActionInvocation actionInvocation) throws Exception {$ F l; B/ E8 X& W! g
// ActionInvocation封装了
3 F0 h3 ]# F' o* z2 u3 L ValueStack vs = actionInvocation.getStack();
& M5 @, d' l* t+ W: G- z }# ?5 \! K# l H" T1 A
}
" o8 y& _) A) ?0 N4 X: U一般会涉及到:
+ r R$ e8 l* \8 b0 `' Z1) ValueStack0 O: U* \0 E8 J- {8 Z
ValueStack vs = actionInvocation.getStack();" m* W$ v* u) Y9 l- I
vs.setValue("ognl", obj);/ J; o+ X! C( L( y
vs.setValue("emp.name", "java");
4 Y D* y0 N* J" D9 m+ @2)Servlet API+ A- T+ Y m' j7 Z. m
ServletActionContext.getRequest();
! v* G' z! E6 N4 y0 i; PServletActionContext.getResponse();
; @! j( K5 G9 j0 B! f: mServletActionContext.getServletContext()& ^. U) o$ G6 ~ w# c# {
3)如何调用后续的Action(其他的Interceptor)
8 E0 \. O2 q: y0 d* i- @: UactionInvocation.invoke()
1 C4 X/ p3 ^; v, L% C4 zAction调用后,Result调用,然后再调用拦截器后续的部分
. q! E9 z( g3 S& C3 W+ }' G2 h D拦截器无法决定返回何种Result
% i1 y" ^ r0 t4 Q2 l: v! g不调用
% v3 l }7 s6 A/ u; l由拦截器的intercept方法的返回值来决定返回何种Result
- O& b+ I- ^6 C; _! s/ VactionInvocation.invokeActionOnly()
. ]4 J5 J8 F0 R; Y1 o5 r只调用Action(不调用Result以及后续拦截器)
# h n! @ A; F& N; M3 g7 @- E: P由拦截器的intercept方法的返回值来决定返回何种Result
& _ ]0 p( z6 Y5 Q" D& b2 y/ _2 s+ k9 Z4 `+ W! H# P7 X+ U8 j
|
|