该用户从未签到
|
struts2 拦截器的配置0 H- T& B' W" f5 G
<package>: G0 o$ _3 R( ~* S! i- [6 u
<interceptors>* ^, I+ Y" i; w" K; o0 b1 [
<!--声明拦截器,指明拦截器的实现类和名称-->0 n$ K G( r A" ~* ~# L7 f. _
<interceptor name="one" class=""> 3 V* V" m; ~8 }: a
<interceptor name="two" class="">
h- O; W2 o* L. ]0 u <interceptor name="three" class="">
9 i6 Y' T( o* x ... .... ....
1 H4 ?7 b% Y q+ B9 ?' s <!--声明拦截器栈,用一个名称表示一组拦截器-->
/ _+ N. v/ u1 `" j X9 x <interceptor-stack name="all">
4 ]) }! L) j( \1 j) S* t <interceptor-ref name="one"/>
! i# P! L* {* ^ <interceptor-ref name="two"/>
4 D0 D4 f8 m4 h! t ... ... ...* D, Y m; v4 B0 a* f
</interceptor-stack>
3 t7 V3 B$ i( T3 ] </interceptors>; m: W, O* ?" R# W# h. c
<!--! n, `6 x. V' m
默认引用的拦截器,如果该包中的Action没有引用拦截器
9 m! }8 @; w- P7 _' y5 E) u 就使用此拦截器 , M) J0 L% Y/ E# ^
--> & `4 a: K/ ?/ {1 ]% |
<default-interceptor-ref name=""/>
5 s" H1 A( ?9 ^ <action name="" class="">; S" V5 g: ?' _2 F
<!--3 w9 T0 b8 f, r4 ] j. |8 Z6 w6 w/ P5 \
在Action中声明拦截器,在调用该Action之前
% Y7 o d- |5 m: `4 S 会调用这些拦截器,如果声明了拦截器则会覆盖 Q: m; D8 N+ C! W
default-interceptor-ref的设置
) F. R. p" P$ l- i6 u$ g+ ?3 d --> ' A" b, G& _0 O7 `
<interceptor-ref name=""/>3 J/ H, W' Z7 I% ~
<interceptor-ref name=""/>
+ k9 v* I+ Y. ^4 q. q ....
/ H: O; J1 O- a+ G6 z <result name=""></result>: p9 m, d, j: b" r" Y: K
</action>& q8 I9 O5 Z6 v0 ]/ l5 \4 B* S
</package>
( }6 k" c0 I9 [* k4 b% X0 N3. 自定义拦截器( n9 l1 m' n4 N7 ]
实现Interceptor,实现其intercept, ]- K" k, p6 B2 i/ c. o
public class FooInterceptor implements Interceptor {
; X+ D/ y* ~7 V+ D; N4 l5 d ... ... ...
: U1 ^" G% r% z4 W9 b( v8 q public String intercept(ActionInvocation actionInvocation) throws Exception {6 r! t2 `! J1 G+ C
// ActionInvocation封装了7 G1 e8 @+ e1 m+ b- q) k7 b0 u8 ~4 ^/ p
ValueStack vs = actionInvocation.getStack();4 T+ z1 r" N$ D9 B
}
6 R3 t |3 I1 v}# C- |1 [0 `. ^( Q- e
一般会涉及到:. B( c* t, c. v- [. B( H! Z+ r
1) ValueStack* \* H) t# ]5 |1 ]% H/ g
ValueStack vs = actionInvocation.getStack();6 \. ?/ m/ S S% C) S+ r% a; W' _/ y
vs.setValue("ognl", obj);) }# A- i# f9 A) _
vs.setValue("emp.name", "java");$ y8 U/ e3 O9 G; Q* d O
2)Servlet API+ I* n0 n. o4 I3 f- a( E$ w
ServletActionContext.getRequest();
2 V3 }/ |* a$ Z, Q+ }% SServletActionContext.getResponse();/ Q% D2 t+ {& E u
ServletActionContext.getServletContext(): S3 ~( Y' a& I4 z. I
3)如何调用后续的Action(其他的Interceptor)# F; s* U3 Q& c7 g0 Z
actionInvocation.invoke()
z+ \( k2 ~1 eAction调用后,Result调用,然后再调用拦截器后续的部分' y5 \( E, k- z4 U$ X' d! e. z' J
拦截器无法决定返回何种Result
7 {4 H. ^/ X% S- g& f不调用! k% |; e& U2 y8 W6 a6 v
由拦截器的intercept方法的返回值来决定返回何种Result
- f! J4 R3 C p# u: h8 ?actionInvocation.invokeActionOnly() @; s; X( |% m- W, W
只调用Action(不调用Result以及后续拦截器)
' J) u% \3 [; G8 ~' Z# P由拦截器的intercept方法的返回值来决定返回何种Result7 S$ y& F6 W4 K3 Y
& |! B h7 S7 W: K4 `! y |
|