|
该用户从未签到
|
struts2 拦截器的配置$ r8 d/ [ Z; K1 ?# [0 o ]. i; P# {
<package>& a7 W2 X9 g4 j0 l; c7 r( j
<interceptors>
! j0 \8 O( j- b& j7 P6 v* r <!--声明拦截器,指明拦截器的实现类和名称-->
6 Q* ?6 y" e5 d5 V' H# n' o <interceptor name="one" class=""> 2 a7 M6 e0 U3 b- h
<interceptor name="two" class="">
! w9 w* x5 @% Q6 U# L# Q# V <interceptor name="three" class="">
/ \. N0 n% L* B* t# w a) J ... .... .... " m. Y& Y; G$ Y
<!--声明拦截器栈,用一个名称表示一组拦截器--> & i3 c! z3 }7 @: O8 A. n
<interceptor-stack name="all">$ ]9 B! g8 Y9 w4 E) `% Q) w1 W
<interceptor-ref name="one"/>
7 I2 L k0 T8 X6 z$ Z <interceptor-ref name="two"/>
8 I3 ], t$ }4 l& Z& _6 H ... ... ...9 P9 K; S0 }0 { `7 H3 I
</interceptor-stack>
% O/ y# \ }7 ]$ c; b% S </interceptors>% j; H7 E0 D0 E% X) J8 e$ S
<!--; Q$ U$ X0 U; y1 N0 k
默认引用的拦截器,如果该包中的Action没有引用拦截器
6 p9 g2 r1 e; k3 b2 @+ W 就使用此拦截器 : ?: s! J1 \' Y# q7 J
-->
/ N+ o+ f& {8 n1 N. { <default-interceptor-ref name=""/>
* G7 f7 j l' d2 v- ^4 l, q <action name="" class="">
3 a3 a5 [, y, H <!--
. z* K, o* T( R2 {; j8 y 在Action中声明拦截器,在调用该Action之前( [/ B. e/ _$ A" E
会调用这些拦截器,如果声明了拦截器则会覆盖- `6 J; d8 x4 O
default-interceptor-ref的设置
2 j7 l2 I3 Q# J/ T --> ) I8 N( E9 a' c, a' z
<interceptor-ref name=""/>% |( C8 }5 r0 W; [/ o$ k
<interceptor-ref name=""/>
/ E. G/ L) K& k- w$ G7 p7 u* a ....
0 Z4 ]7 s& M7 P- {. E3 d <result name=""></result>
) ]/ n( X `; |* a$ ~( p+ G- @ </action>" B$ c% z7 H W1 O
</package>
4 V8 Y# f( z8 A7 l @, ?* C3. 自定义拦截器8 Y# j2 I; X% S; N# y9 Y
实现Interceptor,实现其intercept' Y1 x# Q N4 j
public class FooInterceptor implements Interceptor {
) l$ P6 m: ^6 Q8 f- a: m ... ... ..." l! N3 q4 {( g7 _8 S7 U
public String intercept(ActionInvocation actionInvocation) throws Exception {
% f m2 g- E% d" X( B# O0 _ // ActionInvocation封装了4 H& @' O- d) u2 G/ V* B
ValueStack vs = actionInvocation.getStack();
7 ?; c6 H, m- q* b- Y; E: I* `$ M }& y* ^ W R* P. u! {7 G
}8 E! O) e+ w$ D- i9 E* L3 H7 Z
一般会涉及到:
2 }9 l" c r& b5 }1) ValueStack- N o2 q( n8 r2 s
ValueStack vs = actionInvocation.getStack();
" ?. ?) X$ @9 s' T8 s: Pvs.setValue("ognl", obj);
7 U' Q) }; Y x( F) v7 j+ P9 bvs.setValue("emp.name", "java");
+ e$ T' [, L$ c% C t5 G% r2)Servlet API6 `" G8 c1 z3 }3 ~8 e3 D
ServletActionContext.getRequest();
$ X8 h# h6 c2 t7 s8 p& h# qServletActionContext.getResponse();- n) a; S6 b9 {: ^
ServletActionContext.getServletContext()
" ]2 h% R* D; V' ^1 Y i3)如何调用后续的Action(其他的Interceptor)
; y* X8 }) n) @% JactionInvocation.invoke()
# W% O" N3 ~! e6 t% ^' hAction调用后,Result调用,然后再调用拦截器后续的部分) L3 F$ |* C+ R! t# h
拦截器无法决定返回何种Result: m: F- J5 {7 I; y' C0 w
不调用
+ A( m7 F+ W6 d% X* b9 G由拦截器的intercept方法的返回值来决定返回何种Result
0 S" D. x5 P8 X" h0 g# iactionInvocation.invokeActionOnly()
* m6 [9 D7 I4 d( \; g0 `9 Q只调用Action(不调用Result以及后续拦截器)
( f0 t* ^1 A& Y' i3 a! u0 s由拦截器的intercept方法的返回值来决定返回何种Result
5 m- @+ m' u+ Q9 S2 e8 e8 t2 i0 Y. P8 e: i. h1 Z3 Z3 e& d# W, [
|
|