struts2的配置文件是 struts.xml,在这个配置文件里面可以使用通配符。其中的好处就是,大大减少了配置文件的内容,当然,相应付出的代价是可读性比较差。 struts2通配符的使用方法:形式一:调用相同Action中的不同方法
" ~' l, `% q# ~, _" _<action name="*Action" method="{1}">
6 q0 n# o4 o4 n* y2 U; \<result name="input">/login.jsp</result>
) a* a3 `% w# m- o4 T) l! }& B3 u<result name="error">/error.jsp</result>
! I+ `5 @. ?5 z \- m: Z& H<result name="success">/welcome.jsp</result>
+ |5 e0 D4 T6 U# p6 K</action>
- X! v0 @) G% B. X其中表达式{1}的值--->name属性值中第一个*的值。
& C% c: |& p. o; I如果用户请求的URL为loginAction.action,则调用LoginRegistAction中的login方法;
6 G% z) a8 E, F如果用户请求的URL为registerAction.action,则调用LoginRegistAction中的register方法;
" C: f: o6 f2 L, Q- ?9 o形式二:通过匹配,调用不同的Action的execute方法 y3 }, a) b+ s w; ?
<action name="*Action">( j# c1 D3 e4 [2 l" x6 u B0 b
<result name="input">/login.jsp</result>
; {! {5 x( g* Q1 |# Y2 c }' D u<result name="error">/error.jsp</result>- j2 G% E7 C% _8 |2 n+ m
<result name="success">/welcome.jsp</result>
) k$ _4 ]+ F' `( T/ S; S( S( g</action>
) @* ?: w8 {7 p( x上面没有出现method属性,故默认调用对应的execute方法
O" {8 i' ^+ {$ N6 y如果用户请求的URL为LoginAction.action,则调用LoginAction中的execute方法;
Y* i* x; n+ ]9 u2 B. K如果用户请求的URL为RegisterAction.action,则调用RegisterAction中的execute方法;
7 A- t2 c( P: k5 c2 A7 {. o% ~5 ~形式三:动态结果; D! G! f+ p, G2 j7 R/ K1 ?
<action name="crud_*" method="{1}">' P$ P$ ]9 f9 B3 ]1 E) `+ `1 P
<result name="input">/input.jsp</result>0 e: M' y7 ]- _0 R9 B+ w, c) [
<result>/{1}.jsp</result>
- c/ s' R9 I. R9 _3 O" _</action>
5 V- t0 c) h1 f# Z; W0 l) u当处理结果是success时,* w5 M; w. a2 z2 r& D$ D
如果crud_create.action,则会执行CrudAction中的create方法,并且跳转到/create.jsp;
3 Y* [9 T# D- o* ]) p6 N9 C如果crud_delete.action,则会执行CrudAction中的delete方法,并且跳转到/delete.jsp; struts2通配符注意事项:最后需要注意的一点是匹配的优先权。4 Y' X8 A. R/ O( h
(1)如果struts.xml里面有对应的action name。就算它有其他通配符匹配的,都优先对应完全相同的.
$ o# r! ], L0 \! D# L比如,有一个 action name 是 "user_add" 还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " 。其实,这个很好理解。& j2 Z& v( j1 v
(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面。它匹配写在前面的- r) K8 q% i0 x- S
比如 有一个 action name 是 "*_*" 还有一个是 "user_*" 。现在,来一个请求是 "user_add.action "。那么,它会优先匹配写在前面的。' x, o4 B9 o8 p+ n1 l3 ?, g9 T0 X
任何带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高。
0 D n" J2 r+ S# O1 B |