struts2的配置文件是 struts.xml,在这个配置文件里面可以使用通配符。其中的好处就是,大大减少了配置文件的内容,当然,相应付出的代价是可读性比较差。 struts2通配符的使用方法:形式一:调用相同Action中的不同方法
g9 M& H* C/ P; |" ~1 B8 v<action name="*Action" method="{1}">
! v3 q: [1 l0 I5 P<result name="input">/login.jsp</result>
. d# d: O2 a4 S- R q3 K# \% ~<result name="error">/error.jsp</result>8 [# G6 a9 }( f
<result name="success">/welcome.jsp</result>+ e: ^! d0 i0 {7 w
</action>
# u. q! ]# O. m7 ~& ^. w其中表达式{1}的值--->name属性值中第一个*的值。
- K) L: N- F1 A( M' ?9 N如果用户请求的URL为loginAction.action,则调用LoginRegistAction中的login方法;
2 I3 ]9 i& Y; C/ Y( ~5 ?/ Q* C* `- K如果用户请求的URL为registerAction.action,则调用LoginRegistAction中的register方法;. l- C# F; G9 [( b5 V5 l
形式二:通过匹配,调用不同的Action的execute方法
5 e0 Z7 V/ h" E ^& [<action name="*Action">8 }3 P7 b9 i |; H! D% j$ v
<result name="input">/login.jsp</result>
: p+ } z( M J3 |! @<result name="error">/error.jsp</result>
% g$ F4 c% m0 s4 R& Q8 U) K<result name="success">/welcome.jsp</result>/ G. Z7 E( z( h3 p8 f' y6 ~! v' W
</action> c7 W0 P; ?1 Y& w* B& u/ Z
上面没有出现method属性,故默认调用对应的execute方法9 ]' k5 M3 y1 T" j9 x' _6 G
如果用户请求的URL为LoginAction.action,则调用LoginAction中的execute方法;
! f& f+ ^6 r4 ]5 E如果用户请求的URL为RegisterAction.action,则调用RegisterAction中的execute方法;
; C2 K0 D N/ A5 u$ K* o M' [6 D; F* u形式三:动态结果! k6 c" ~' W5 b1 h& C7 }# S
<action name="crud_*" method="{1}">6 B+ R- W, v7 E: E. k8 z" a
<result name="input">/input.jsp</result>
4 z1 i6 M% y' n7 f0 D2 u9 g H<result>/{1}.jsp</result># ~2 C1 O( h7 _& W' j1 }
</action>
' A! R& O5 n; A* I& S5 A' S当处理结果是success时,. Y1 M* p1 Y0 z
如果crud_create.action,则会执行CrudAction中的create方法,并且跳转到/create.jsp;
4 P" {+ x- X$ x o4 B如果crud_delete.action,则会执行CrudAction中的delete方法,并且跳转到/delete.jsp; struts2通配符注意事项:最后需要注意的一点是匹配的优先权。7 t. s. F0 [7 c. d' |
(1)如果struts.xml里面有对应的action name。就算它有其他通配符匹配的,都优先对应完全相同的.
, K6 I7 V+ ^1 Z% c- i; Q比如,有一个 action name 是 "user_add" 还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " 。其实,这个很好理解。; w9 P% S0 a( U
(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面。它匹配写在前面的0 L; y! V; t- l! z6 J" F
比如 有一个 action name 是 "*_*" 还有一个是 "user_*" 。现在,来一个请求是 "user_add.action "。那么,它会优先匹配写在前面的。
+ Y' v$ L8 K& f) M任何带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高。 7 X2 K, |. D' a9 a$ |; g
|