该用户从未签到
|
struts2 拦截器的配置
, v" J' }- V; ^5 f<package>8 n2 A* |3 y! M( g) O/ R% y
<interceptors>% x+ o7 [& {# J$ D% j
<!--声明拦截器,指明拦截器的实现类和名称--># T; ?7 y; L$ K5 K& t
<interceptor name="one" class=""> 1 w- Y/ y2 _9 z; q- |
<interceptor name="two" class="">
+ `1 B+ X# ~7 z% a$ X( ? <interceptor name="three" class="">
4 G" R0 [, t% t1 v7 E% B ... .... .... + }$ ^2 W3 r5 z0 f' B; `
<!--声明拦截器栈,用一个名称表示一组拦截器-->
1 R: {8 f8 }* o1 v1 U <interceptor-stack name="all">
, Y2 {5 n$ B( Q3 I8 _& J R <interceptor-ref name="one"/>/ }) H" F& @7 H- C+ k( F1 t, k, [
<interceptor-ref name="two"/>0 T4 h {1 x3 A5 e( L
... ... ...
( l( t! y; B; S. y </interceptor-stack>
' U H: x7 T9 X! x0 q </interceptors>4 @3 c' @% j3 |/ Y
<!--: m, V2 l, O$ ?1 V1 }! x$ Q
默认引用的拦截器,如果该包中的Action没有引用拦截器' Z8 z* h& q# c- n& ^
就使用此拦截器
2 Y F) n$ z, x; j* V -->
* ^' l9 ~3 x r, C8 Q/ Z* D! ? <default-interceptor-ref name=""/>2 L3 k. ^2 U/ f6 M
<action name="" class="">
G! }- O& c3 _- Z <!--
6 U" e& [( k' e: \; w 在Action中声明拦截器,在调用该Action之前& l1 y9 E- v* }5 `
会调用这些拦截器,如果声明了拦截器则会覆盖" ~; K/ ?% [$ \1 l: b/ `) Z
default-interceptor-ref的设置
" a6 ^. c+ U; Z --> . T# O4 r1 v: V7 q/ R
<interceptor-ref name=""/>1 c& \" m N& I. B
<interceptor-ref name=""/>1 ?2 q; o8 W' W/ s& s t. }) X
....3 ]% t% M; `6 m0 z: Q7 s
<result name=""></result>+ d# w6 ^8 J& Y4 e; y' ?1 Y
</action>
6 I5 q7 W6 X1 J0 k! J</package>
m' l: s8 n, }0 T) N3. 自定义拦截器: D/ v" E$ X ?. G
实现Interceptor,实现其intercept
: A$ e- Q1 z9 i, I' g7 F: q; Zpublic class FooInterceptor implements Interceptor {
6 c f7 D( ? L ... ... ...
' _# s0 u8 x5 z" U: w! O9 B4 n public String intercept(ActionInvocation actionInvocation) throws Exception {* Q' \" f7 G9 F7 r, @2 ?3 }+ l" ~
// ActionInvocation封装了 Y7 E9 \, f6 Y$ C. V
ValueStack vs = actionInvocation.getStack();
, \& K& g' }$ W5 V ^ }) G& ~8 j' o& Z' J7 E/ Z
}# Z3 m+ d' e) F
一般会涉及到:. {2 D: y0 i/ Y2 H1 W" I/ c- \6 ]
1) ValueStack
! G9 S* D. U5 u3 \2 K/ H4 }- IValueStack vs = actionInvocation.getStack();
1 S0 p/ r" E* l5 V. `8 Avs.setValue("ognl", obj);9 N0 [ _0 z/ g0 y' K7 {
vs.setValue("emp.name", "java");
1 w/ U0 U" S ^* a* B- M8 v2)Servlet API' Q/ j- P7 q+ G! _3 y% B7 A
ServletActionContext.getRequest();, B: P/ K8 w2 M; r& u
ServletActionContext.getResponse();
0 X9 B0 @6 G. }; B6 K$ h) GServletActionContext.getServletContext()
, }; w, D$ l& ]% n3)如何调用后续的Action(其他的Interceptor)# o( C; U# k4 Y; G
actionInvocation.invoke(); O! Y/ k; _7 L4 h
Action调用后,Result调用,然后再调用拦截器后续的部分% l6 b7 z2 G: v
拦截器无法决定返回何种Result
7 o l5 u2 i$ Z2 l9 a不调用" |( [/ X3 j: w1 G( J' ^! T
由拦截器的intercept方法的返回值来决定返回何种Result
$ {: H3 m* P% ]4 R2 {: AactionInvocation.invokeActionOnly()
! z) ?" N' `9 I只调用Action(不调用Result以及后续拦截器); t& J Y/ t' N; M; x: H
由拦截器的intercept方法的返回值来决定返回何种Result
; E" T% T+ w& }) w6 _# q
4 e% y% _9 l8 L" T6 _/ Y |
|