struts2的配置文件是 struts.xml,在这个配置文件里面可以使用通配符。其中的好处就是,大大减少了配置文件的内容,当然,相应付出的代价是可读性比较差。 struts2通配符的使用方法:形式一:调用相同Action中的不同方法4 L# z3 _* S2 J9 O& W! p
<action name="*Action" method="{1}">$ O1 _: d$ E7 d) p5 m% @
<result name="input">/login.jsp</result>
# _" ], A; A! k, h+ w/ P<result name="error">/error.jsp</result>
- G. E: _' F4 {<result name="success">/welcome.jsp</result>
: R7 r( ?" S- Y" V. B( @, U2 w) R, Y</action>
0 Z; t5 B+ W: z9 ]0 n6 ?其中表达式{1}的值--->name属性值中第一个*的值。6 e0 m( }( q) K N
如果用户请求的URL为loginAction.action,则调用LoginRegistAction中的login方法;
. w, a$ r1 v; O& ~, Z' A" d! q8 i如果用户请求的URL为registerAction.action,则调用LoginRegistAction中的register方法;
7 s0 Q- {0 m# \) S0 N d形式二:通过匹配,调用不同的Action的execute方法; J5 i' k5 o3 y# C# x
<action name="*Action">
9 ], R8 Q" T1 c6 M2 V r<result name="input">/login.jsp</result>7 f* a- H4 I8 X2 ~: |
<result name="error">/error.jsp</result>) a* e! o$ x+ I8 F8 F) B
<result name="success">/welcome.jsp</result>
1 d1 c: U( T/ y, c0 J6 `; w</action>
2 N0 F5 g1 T+ O T上面没有出现method属性,故默认调用对应的execute方法
, M. a" Q" `6 [: N8 D# l: u如果用户请求的URL为LoginAction.action,则调用LoginAction中的execute方法;9 o5 ]1 v9 H4 V% R! _
如果用户请求的URL为RegisterAction.action,则调用RegisterAction中的execute方法;6 H4 t5 c: C5 d4 m0 W) I# e' d& o1 L
形式三:动态结果
( g7 l0 \* e* [& P' d2 Q* j) n<action name="crud_*" method="{1}">8 ~- [9 H7 Y3 |- m
<result name="input">/input.jsp</result>& r4 u) j5 A: l- c
<result>/{1}.jsp</result>
; M% g/ R# d( r</action>
% B2 ^) u7 I Z* a% @# _当处理结果是success时,
! C# T2 e* ]5 J5 {# d1 U如果crud_create.action,则会执行CrudAction中的create方法,并且跳转到/create.jsp;# s F: @0 G) U7 O Q
如果crud_delete.action,则会执行CrudAction中的delete方法,并且跳转到/delete.jsp; struts2通配符注意事项:最后需要注意的一点是匹配的优先权。. Z) g* a6 M/ Q$ X7 A4 R
(1)如果struts.xml里面有对应的action name。就算它有其他通配符匹配的,都优先对应完全相同的.' [( Y5 o. K: G- _3 D! M8 z
比如,有一个 action name 是 "user_add" 还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " 。其实,这个很好理解。
: F1 M9 v& r, G+ m3 P- _(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面。它匹配写在前面的9 S: c& Y$ C4 a
比如 有一个 action name 是 "*_*" 还有一个是 "user_*" 。现在,来一个请求是 "user_add.action "。那么,它会优先匹配写在前面的。6 v2 z7 U7 y+ C3 k7 m% B
任何带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高。 ; n. [0 p" w( j& h
|