该用户从未签到
|
struts2 拦截器的配置
/ B* J8 v' {7 _* ~1 \" e<package>( }$ m E7 E3 D! f" }5 V, Q9 N
<interceptors>
$ v4 [& c9 s- g0 b5 M2 v& d <!--声明拦截器,指明拦截器的实现类和名称-->
3 z" u" C$ u0 }$ [0 Y/ s8 o% ~ <interceptor name="one" class="">
: s7 ]8 c9 x, B' R" O: B7 k <interceptor name="two" class=""> . L: d5 _+ d. b" f5 F
<interceptor name="three" class="">
) e$ @# B) B: j0 G ... .... .... # W! Y5 Z5 {& d1 _; M) @3 t, ]0 y
<!--声明拦截器栈,用一个名称表示一组拦截器-->
" }9 G; v" W' Z2 S/ H4 S2 | <interceptor-stack name="all">
% Q( _" c( W/ }9 Z# e <interceptor-ref name="one"/>
- I1 m; k0 b' _% t6 w+ {3 ~/ T, d <interceptor-ref name="two"/>
3 s* r: B- a0 c ... ... ...! d9 l! S2 t% k. }3 M
</interceptor-stack>3 n |' I- ~; \" I' H) l* f
</interceptors>
7 d+ N1 V$ U) b1 m <!--
' ^' L; G4 N, }3 @7 Z O# o% ~ 默认引用的拦截器,如果该包中的Action没有引用拦截器
/ J3 E' J* {+ f/ p7 ^4 |6 | 就使用此拦截器
% B( V' A- O/ K+ c3 N3 n0 t -->
& s$ G* P! @" T( o; Y <default-interceptor-ref name=""/>& @, i6 P+ z6 j/ l
<action name="" class="">
7 G+ y; T8 O$ v& ~6 e7 x; e <!--0 D W7 c O& D- u7 i) K* w
在Action中声明拦截器,在调用该Action之前
: x# k6 I1 W1 q8 }5 K% c6 [ 会调用这些拦截器,如果声明了拦截器则会覆盖0 w0 C# ~% D3 H+ {) O ]
default-interceptor-ref的设置- F) A) j) r- K) Y6 o. Q
-->
$ ]) Z$ C$ P. Z& \ <interceptor-ref name=""/>- q( Q$ @- ~ p0 s- {7 j% O
<interceptor-ref name=""/>
1 n0 C, v7 H2 d1 `* |1 ^+ }8 w- C ....) i+ r4 x, Q# A$ y
<result name=""></result>9 q, w7 M0 P$ U! r, s
</action>
/ E3 B- G# N$ P" }9 P</package>1 ]7 M9 B1 a2 G$ G! Z& h
3. 自定义拦截器, l! w: W$ r9 w R
实现Interceptor,实现其intercept9 U1 v6 ^ @5 N0 t7 N5 h/ ~, v8 u
public class FooInterceptor implements Interceptor {& T. A# N) o; L, m$ T& ~
... ... ...
) _; O# D3 J9 K4 P public String intercept(ActionInvocation actionInvocation) throws Exception {. f& e$ x& ^+ o
// ActionInvocation封装了
: @& q) x* O9 t$ z$ s ValueStack vs = actionInvocation.getStack();
: G* Q* z) E" I* \0 X7 N }
- X4 u. U1 H- x}* c7 K: s O$ O% ]
一般会涉及到:( P2 R4 i ~& l) N- N
1) ValueStack/ t/ u+ c4 T& F! `- p
ValueStack vs = actionInvocation.getStack();, m% K( Y1 E: ^! m, e) C) S$ O, w
vs.setValue("ognl", obj);
0 A9 x# q" }$ w( W: @vs.setValue("emp.name", "java");* I7 x9 K, }) L$ k
2)Servlet API
% J6 k% y5 [6 W0 JServletActionContext.getRequest();' e: @+ H9 |% z* {
ServletActionContext.getResponse();
: p4 e! ` i3 I. _ AServletActionContext.getServletContext()
: Q7 k% U2 x8 M, T$ J* [3)如何调用后续的Action(其他的Interceptor)
4 d" y0 h# M$ FactionInvocation.invoke()
- v% Z6 _. `" l5 QAction调用后,Result调用,然后再调用拦截器后续的部分/ d; A) r1 R R) D$ B7 D; H
拦截器无法决定返回何种Result
* Z& y- L8 ^9 V- y) }( y/ J不调用
g" c& `& U4 _# v. w由拦截器的intercept方法的返回值来决定返回何种Result
3 I1 t" o3 d3 l0 R6 ?7 X4 p$ vactionInvocation.invokeActionOnly()
9 g7 z( S5 h8 V$ `3 Q只调用Action(不调用Result以及后续拦截器)
, R/ V5 C$ N: O3 ~. z; ?由拦截器的intercept方法的返回值来决定返回何种Result8 v0 ~ X. y, p+ F" N
: {6 Q h3 w! V0 V% x5 y |
|