|
该用户从未签到
|
struts2 拦截器的配置* E% q! K& R2 b- M' L7 x
<package>
& V) [- t$ ]* ~9 S- R: U# ~$ C <interceptors>
% h H7 l: o1 n9 k0 o <!--声明拦截器,指明拦截器的实现类和名称-->
5 M" {9 T2 A6 k <interceptor name="one" class="">
6 Z' O4 q1 {0 B; W4 ^" m) A, [ <interceptor name="two" class="">
+ [& E+ ~+ h% r; l <interceptor name="three" class="">
* i% x5 ^6 h) L! m ... .... ....
6 N" Z1 T+ ]) P0 K <!--声明拦截器栈,用一个名称表示一组拦截器--> & b) B4 q! }+ D1 z7 l m
<interceptor-stack name="all">
J$ \; ^8 Y. E0 u0 R <interceptor-ref name="one"/>3 n2 }3 _3 R9 G: d
<interceptor-ref name="two"/>
" m) i+ H% m& |0 b* c. K ... ... ...
O* W S- H& N! W( J8 m" L </interceptor-stack>' V* k7 x7 T' }/ [, ]7 N
</interceptors>* m8 y5 G: }/ |& N& {7 N
<!--
) V/ }1 K" w8 V& L5 w2 o: H) I 默认引用的拦截器,如果该包中的Action没有引用拦截器
% ?1 a3 k4 A2 A/ F9 p 就使用此拦截器
" i! o3 G: @4 |$ |3 p7 k( m! P --> 1 A- `5 q- F% b; k4 A
<default-interceptor-ref name=""/>
$ p) S) w5 L" ~7 W$ J: O <action name="" class="">( |" Z0 s3 b, D2 j! F7 U) Q
<!--
5 k/ S$ [6 L3 K# Y/ _+ t 在Action中声明拦截器,在调用该Action之前( t9 L) q' s6 G$ j2 K0 z8 ~' l* ?! |, s
会调用这些拦截器,如果声明了拦截器则会覆盖7 D$ k7 |# `0 i: z q" e& w
default-interceptor-ref的设置
; m' \5 u! V1 P+ m; Y3 F3 _$ @ -->
0 x0 ~3 q; h. s; I- m* h2 h <interceptor-ref name=""/>* U7 e( |6 w+ K
<interceptor-ref name=""/>' m! `9 y8 D9 K
....5 v$ Z7 B3 \5 J+ {! j. g
<result name=""></result>
% e5 w" ?6 r$ ^2 y1 { </action>" ^: d8 X4 ~4 l# O* _0 p
</package>
& j& E' a$ o) j. L3. 自定义拦截器% f; U S5 J' ~* n7 j, J3 y
实现Interceptor,实现其intercept
/ M9 r- X: D3 ~1 c$ Jpublic class FooInterceptor implements Interceptor {# r( W. M: s0 R- L5 C
... ... ...
- h+ |, x+ \ u- n' Z# N public String intercept(ActionInvocation actionInvocation) throws Exception {
6 k- x, P a. o3 S5 O. E9 Q1 c // ActionInvocation封装了
' U. x/ ?. \, F1 { ValueStack vs = actionInvocation.getStack();9 N. E: N4 F$ G% k; ]7 ~" {" S
}: N4 K& O) k* V7 [; F! s# x T
}8 J& K8 A5 i: M5 z
一般会涉及到:8 K1 H4 V9 c5 q& T3 h& ~
1) ValueStack5 ^* A; g/ \/ a
ValueStack vs = actionInvocation.getStack();
% d8 Q& ~$ H* k! g8 o# Q, v1 e7 jvs.setValue("ognl", obj);3 s% o% e5 j2 ^1 v. y( _2 E3 ^+ \1 G
vs.setValue("emp.name", "java");& i# @! w- I. R5 N" Q' x: _
2)Servlet API/ ?1 \% v S$ w# D, p
ServletActionContext.getRequest();
( e: [2 q2 X2 h, n9 l% m) y6 W! B, DServletActionContext.getResponse();6 m1 o1 ?! C, \9 i/ Z
ServletActionContext.getServletContext()) R' E4 S$ t5 N( s( Q" N
3)如何调用后续的Action(其他的Interceptor)% G0 G$ c5 s0 k( b! c! T
actionInvocation.invoke()$ j- W% _, O) |" g3 C) \
Action调用后,Result调用,然后再调用拦截器后续的部分
& v b% t/ j; K拦截器无法决定返回何种Result
3 q9 l! g" v+ S! M不调用
/ T6 r0 H/ Z. p+ |' g: r" D& N1 v由拦截器的intercept方法的返回值来决定返回何种Result
2 m% I- S7 u1 n# @; N, J! g1 eactionInvocation.invokeActionOnly()
0 L) O" R C. u4 n4 l9 x$ N只调用Action(不调用Result以及后续拦截器)
# X, E! Z0 F, ~6 G1 P7 T由拦截器的intercept方法的返回值来决定返回何种Result- E; V% B" T4 t3 @* h8 W. t
b- M7 d% U; l3 A: J- E* M8 b |
|