该用户从未签到
|
struts2 拦截器的配置. s4 e) L* w1 @* t' q) ]; y
<package>3 m5 a' N# Z5 w) A
<interceptors>
( p% t) J0 I+ i <!--声明拦截器,指明拦截器的实现类和名称-->
4 _0 e: Z' o' a5 } <interceptor name="one" class="">
( t' E: N0 J: F/ ] <interceptor name="two" class=""> ( w- o2 K" S ]/ i1 T, t7 Y. f6 e
<interceptor name="three" class="">1 i- c6 H$ E' e! p; x) ^
... .... ....
7 a/ _! i1 B8 w- r& I, H <!--声明拦截器栈,用一个名称表示一组拦截器-->
" r# P) J& x8 c) W <interceptor-stack name="all">% q H+ h1 t z# u8 c
<interceptor-ref name="one"/>
! W1 F: J8 k$ J( T# d: d: T# i% | <interceptor-ref name="two"/>% Y3 r) R$ X8 ^+ M3 S. t
... ... ...% A0 j1 V, s8 W ^( I' a* B# K) ]# j
</interceptor-stack>, n* p- E4 @8 L( J: B( W( I: k
</interceptors>
+ S* n' r- s/ L2 k7 y# }0 Q9 b <!--: `& e* D/ ^4 z+ L
默认引用的拦截器,如果该包中的Action没有引用拦截器
3 p4 f' O/ H' [; J# V8 @4 K 就使用此拦截器 # b% r2 b, U, E' ~8 r7 O5 A
--> 7 L. V; J8 k# C. P; ]# ^$ Z6 E9 F
<default-interceptor-ref name=""/>; W3 f* B. n. ^
<action name="" class="">$ a- k& b2 e: m5 i- e+ j4 a1 @8 |, ~
<!--- E( {3 w0 o; s0 R* ]5 q- @. @
在Action中声明拦截器,在调用该Action之前
: @5 Q/ a ?% |5 M4 u: _* \7 D 会调用这些拦截器,如果声明了拦截器则会覆盖) F; d$ ^, u9 c* v8 L
default-interceptor-ref的设置+ _" ^/ {3 }; c6 h8 l7 H6 a
--> / p7 G% n5 T; a8 A) Q9 i
<interceptor-ref name=""/>
- D( z: W' `& X$ }! U* v. d <interceptor-ref name=""/>
j$ r/ e( P% Y' s% a% } ....& _) K- F8 }1 q9 S# ?9 f
<result name=""></result>: H- X/ V- n& F
</action>3 r0 ^( H: `9 d3 x, f
</package>
; x: ^+ I# `% T# u3 f) {+ P( [3. 自定义拦截器( j S. D" r9 N6 E: d
实现Interceptor,实现其intercept; `' ^& W: C8 v$ z8 q
public class FooInterceptor implements Interceptor {
/ |: H# N; a, o& S ... ... ...
# j4 n4 n9 Q) _" n9 ]* V public String intercept(ActionInvocation actionInvocation) throws Exception {" A) {) ~, W& D) n0 j$ d
// ActionInvocation封装了, l. O! `2 }; }5 u% r8 W
ValueStack vs = actionInvocation.getStack();* t* ^& w# T# k! ?. E }, @3 m
}
4 m# A1 l5 m" f% d' _ ~} A: k, C. {& T% K0 i; e f- D6 }
一般会涉及到:
( z) n! ?0 p F1) ValueStack% Q8 z& m$ S# q6 h* R" R4 @
ValueStack vs = actionInvocation.getStack();# k( U+ m$ o/ ~2 F
vs.setValue("ognl", obj);) B8 o$ m% l: V1 A' u& i1 y
vs.setValue("emp.name", "java");# o5 E2 X' ?$ J; y
2)Servlet API7 M1 o" l0 |8 k0 }6 ^
ServletActionContext.getRequest();8 g5 S0 d/ \! B A) @ ]
ServletActionContext.getResponse();
$ [6 G/ j H1 p' E8 A' zServletActionContext.getServletContext()
- g' k" o* z" S* A% \3)如何调用后续的Action(其他的Interceptor)2 S8 ?7 ^% ^4 @
actionInvocation.invoke()
; z4 J0 F+ r7 h7 z2 X: @% S5 iAction调用后,Result调用,然后再调用拦截器后续的部分
8 `' k% p& [: E" k) J拦截器无法决定返回何种Result" m% I0 ^ p! ~# ~# ^) H
不调用
( p6 P1 j4 g: L& P/ n, `, e由拦截器的intercept方法的返回值来决定返回何种Result
* q Q6 C2 B9 I, y( IactionInvocation.invokeActionOnly()
* w/ {% m9 A" B6 }8 l8 w5 r- O$ k只调用Action(不调用Result以及后续拦截器)5 e# C% o$ p& ]
由拦截器的intercept方法的返回值来决定返回何种Result
# b8 [4 a( Z0 N x& f6 k7 `+ i0 u
8 k3 N$ G& u! u- e# U; L6 s5 x. D |
|