|
该用户从未签到
|
struts2 拦截器的配置3 _* d8 n* {; e! P& p
<package>$ _/ ]3 M+ `* @! g2 L
<interceptors>2 d: [+ U9 a% ?* U+ m8 A6 R
<!--声明拦截器,指明拦截器的实现类和名称-->
0 z$ N& D; N4 H2 y8 s' p0 e3 R <interceptor name="one" class="">
( j2 {# w, \) U( u& g/ \* ], X <interceptor name="two" class="">
( s# v8 V5 P }1 \ v' h" B6 ?! N <interceptor name="three" class="">
8 d8 i* I/ V- S0 ^ ... .... .... ' x# J4 f1 J/ H+ e2 E
<!--声明拦截器栈,用一个名称表示一组拦截器-->
; S) A1 l2 h1 j8 A* b/ N7 z, R <interceptor-stack name="all">: c3 U ?1 N. S2 K+ I1 s( R1 E" A
<interceptor-ref name="one"/>( ~2 B. c9 Q. S9 F0 n) ?
<interceptor-ref name="two"/>4 k/ \! i" b1 g
... ... ...- e7 I% s' N! c5 Y9 @
</interceptor-stack>
8 L5 K" Y& u1 Q3 s$ M </interceptors> J$ [2 Y! J9 E2 L; L7 p: x( d
<!--
0 o3 E7 R) \+ e# @5 r5 ~4 A+ c 默认引用的拦截器,如果该包中的Action没有引用拦截器
* b" g6 A. r$ c8 K: W 就使用此拦截器
9 x6 f6 y4 E- C+ x: z/ ? --> ! T. M3 R' s# D/ H6 t
<default-interceptor-ref name=""/>
3 ]) \1 O2 S( s! s <action name="" class="">. K) y9 R' Z2 u
<!--
' V. K% _* n; ?7 w 在Action中声明拦截器,在调用该Action之前
! r! z& F3 O- P$ Y. x/ V! O: C, k 会调用这些拦截器,如果声明了拦截器则会覆盖3 N2 F5 Z% L1 K7 Z4 i; s
default-interceptor-ref的设置" }/ f$ b, K! |3 [: Z* d2 `) ~
--> . o" x# l) K# |7 q
<interceptor-ref name=""/>& M- c7 D6 S5 ~
<interceptor-ref name=""/> Q" Z1 ?( z* V3 d
..... G, ]0 A( i l/ W$ f
<result name=""></result>1 l: u8 _0 a2 q% j: d
</action>
b5 e0 X8 K! c4 C+ u8 Z</package>: p: J- {4 n: ^4 Y: T+ Y
3. 自定义拦截器, P7 I0 l9 G% v) s3 X
实现Interceptor,实现其intercept( s3 h4 @6 z0 |$ d) W
public class FooInterceptor implements Interceptor {
4 I) m: N0 c! t# K2 `4 u ... ... ...
$ S/ _6 K! t- x; l9 N$ J! U public String intercept(ActionInvocation actionInvocation) throws Exception {+ ~8 `/ ?, K: o+ p. ?$ r, h
// ActionInvocation封装了
g% `% k, Z1 a# W! ^; v% b ValueStack vs = actionInvocation.getStack();
/ [2 j2 Q! x4 F7 X! N } O3 o- O' l. c; t7 a3 s
} |* O5 Q6 D/ r" _; ?; k
一般会涉及到:8 z, e4 T; I- P/ b! c& u/ A
1) ValueStack
0 `- k4 U1 Y/ g; ]ValueStack vs = actionInvocation.getStack();' |( o6 Y" T3 ?7 `' E
vs.setValue("ognl", obj);
+ m' m& M) Y& y. wvs.setValue("emp.name", "java");
. X ]6 m+ b) c6 r2)Servlet API
1 Q1 I" L) M# @6 P; nServletActionContext.getRequest();
4 c0 }3 a; S# c+ WServletActionContext.getResponse();
; T5 ?8 B8 S* x8 tServletActionContext.getServletContext()
( j3 z" o+ F7 X4 Y3)如何调用后续的Action(其他的Interceptor)
8 o8 {: Y8 q0 s+ R" D. |2 ^actionInvocation.invoke()
6 j; x1 r9 n4 s; R. ^0 G- S+ n$ ]: tAction调用后,Result调用,然后再调用拦截器后续的部分, s& j4 K. O; S4 j! R
拦截器无法决定返回何种Result( i/ p& p7 q& p8 C
不调用
$ ^7 A+ x- I) Z$ N7 V0 z7 t由拦截器的intercept方法的返回值来决定返回何种Result
$ \1 T& n( G: R- J. z7 b% QactionInvocation.invokeActionOnly()
* L0 r- v. n. B只调用Action(不调用Result以及后续拦截器)
* o: s M9 G" [; z7 D4 P* t由拦截器的intercept方法的返回值来决定返回何种Result. K1 B* f! @9 d; A0 A5 [' L
+ G% I; b: X) Q: g V
|
|