|
struts2的配置文件是 struts.xml,在这个配置文件里面可以使用通配符。其中的好处就是,大大减少了配置文件的内容,当然,相应付出的代价是可读性比较差。 struts2通配符的使用方法:形式一:调用相同Action中的不同方法
9 q" r* N1 {7 K% K) U0 ~<action name="*Action" method="{1}">
+ k" v1 f6 I/ T" @; l6 k0 s<result name="input">/login.jsp</result>
# ?1 e, K; S5 _7 s3 C2 x3 E: x<result name="error">/error.jsp</result>
: w% L. B$ v3 |* E<result name="success">/welcome.jsp</result>
+ }, Y/ c9 x$ H7 n( m$ Z/ h; }9 r</action>) ?* t3 L) r# E" N: D. E) h
其中表达式{1}的值--->name属性值中第一个*的值。
0 i$ r" q3 W2 o- v$ p, v4 X如果用户请求的URL为loginAction.action,则调用LoginRegistAction中的login方法;
; D+ X" U% h5 J3 g6 x5 C+ m0 r如果用户请求的URL为registerAction.action,则调用LoginRegistAction中的register方法;
! T' M/ x7 N: X$ l6 F. u形式二:通过匹配,调用不同的Action的execute方法* Y" M# }1 e" ]& i
<action name="*Action">
9 ]0 V7 ]' e7 x9 s7 u( g9 W, s<result name="input">/login.jsp</result>
: _: h0 u. q. p {3 f K<result name="error">/error.jsp</result>2 l* p/ U8 P. @
<result name="success">/welcome.jsp</result>1 ]) ]$ a/ L+ q; w: Y
</action>$ A6 t6 p' H6 t% {
上面没有出现method属性,故默认调用对应的execute方法
. `% o, u8 j3 B' ]+ B$ n如果用户请求的URL为LoginAction.action,则调用LoginAction中的execute方法;
. w; q3 b$ |4 s7 Q- {& y如果用户请求的URL为RegisterAction.action,则调用RegisterAction中的execute方法;
" A( h6 y$ J# j) _7 u形式三:动态结果) k& @+ a3 y, u0 U$ Z. a+ k6 I4 Z, ^ J
<action name="crud_*" method="{1}">, p0 ]/ w d0 @ m
<result name="input">/input.jsp</result>& \# v1 F0 ]5 P$ H
<result>/{1}.jsp</result>+ u7 H# _ R+ {$ e4 L
</action>
) {# u0 l1 s5 z当处理结果是success时,
' [1 c( C8 p2 U( z& o' E1 Y如果crud_create.action,则会执行CrudAction中的create方法,并且跳转到/create.jsp;
" n3 @9 I# c/ t如果crud_delete.action,则会执行CrudAction中的delete方法,并且跳转到/delete.jsp; struts2通配符注意事项:最后需要注意的一点是匹配的优先权。
' ~9 K% p1 n7 e, I(1)如果struts.xml里面有对应的action name。就算它有其他通配符匹配的,都优先对应完全相同的.
- H; q9 I4 K. X3 N比如,有一个 action name 是 "user_add" 还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " 。其实,这个很好理解。
, ]" r3 D2 P! v1 r5 O7 N1 L(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面。它匹配写在前面的
: o) O2 l' l) P比如 有一个 action name 是 "*_*" 还有一个是 "user_*" 。现在,来一个请求是 "user_add.action "。那么,它会优先匹配写在前面的。. j: a$ y5 R& f/ E% i; }
任何带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高。
4 t# [$ f4 U" Z9 W) Y6 r1 k |