struts2的配置文件是 struts.xml,在这个配置文件里面可以使用通配符。其中的好处就是,大大减少了配置文件的内容,当然,相应付出的代价是可读性比较差。 struts2通配符的使用方法:形式一:调用相同Action中的不同方法
* b6 B3 |8 b A! q- U# J' H<action name="*Action" method="{1}">
/ W+ @1 v. {4 \<result name="input">/login.jsp</result>
! o, t+ [/ L7 Y9 p<result name="error">/error.jsp</result>1 E% O3 |9 C3 \; M3 B: C( l
<result name="success">/welcome.jsp</result>
" i# H' n- `( o. C0 i- E</action>
* {( ?: k: u8 Q$ Q$ q- V2 N其中表达式{1}的值--->name属性值中第一个*的值。8 Q4 B. F' n, Q0 f x5 u
如果用户请求的URL为loginAction.action,则调用LoginRegistAction中的login方法;
4 e* ?$ M Z! S* d如果用户请求的URL为registerAction.action,则调用LoginRegistAction中的register方法;
. P+ w& v I- ~$ I形式二:通过匹配,调用不同的Action的execute方法
5 j" n2 q Y: j: \, F P7 O. J$ U<action name="*Action">
( Z, d- V8 t- l1 D: B4 c. I% d+ b8 t<result name="input">/login.jsp</result>
0 @ D, s. _9 }<result name="error">/error.jsp</result>8 W* H/ d0 I- P0 j
<result name="success">/welcome.jsp</result>
w1 B$ W' I- ~' ?2 G* x# I6 r1 F</action>
$ N7 W' Q/ D$ n5 g: X: V5 M y0 h上面没有出现method属性,故默认调用对应的execute方法
* M! W+ ?. `# l3 {0 v- W7 Z S如果用户请求的URL为LoginAction.action,则调用LoginAction中的execute方法;0 E0 ?* L0 f* d( k
如果用户请求的URL为RegisterAction.action,则调用RegisterAction中的execute方法;4 n4 l, N( m- A+ _# o2 X0 c' M* n
形式三:动态结果' ^% [$ O: T r& w+ l, k
<action name="crud_*" method="{1}">4 A9 a2 q0 {/ C4 j# n7 `
<result name="input">/input.jsp</result># j/ C+ U4 z" r; u& u+ n9 d
<result>/{1}.jsp</result>
. N1 B: }& q7 C</action>2 M# p& y5 V; s: V6 H
当处理结果是success时,
% P" o4 N/ Z0 o* |8 X2 ~3 G9 N如果crud_create.action,则会执行CrudAction中的create方法,并且跳转到/create.jsp;- A' t' T7 y- @! w* S
如果crud_delete.action,则会执行CrudAction中的delete方法,并且跳转到/delete.jsp; struts2通配符注意事项:最后需要注意的一点是匹配的优先权。* w+ ?. U0 s7 W9 R# @, o
(1)如果struts.xml里面有对应的action name。就算它有其他通配符匹配的,都优先对应完全相同的.
) I, z+ p% e- \$ R% D, Y* J比如,有一个 action name 是 "user_add" 还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " 。其实,这个很好理解。/ ^- P# p$ F5 v+ g
(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面。它匹配写在前面的
4 @9 p( k. h2 J8 N8 J; I+ p% V& \+ ]5 m比如 有一个 action name 是 "*_*" 还有一个是 "user_*" 。现在,来一个请求是 "user_add.action "。那么,它会优先匹配写在前面的。( R' \5 z) o9 g6 l+ d) S; N6 W
任何带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高。 : h8 C& ?. I9 K! h8 Z \
|