struts2的配置文件是 struts.xml,在这个配置文件里面可以使用通配符。其中的好处就是,大大减少了配置文件的内容,当然,相应付出的代价是可读性比较差。 struts2通配符的使用方法:形式一:调用相同Action中的不同方法
! D. J- O* q5 P5 Y1 _& U! F4 ]5 Q<action name="*Action" method="{1}">
, u9 A$ k: s4 z3 [ K" ?( _<result name="input">/login.jsp</result>2 s0 p6 ~: w7 @3 G
<result name="error">/error.jsp</result>; R! ?; @2 r( B# t/ L; u
<result name="success">/welcome.jsp</result># `( G& x! c( `) n- ~. Z! O
</action>
* }. ]: x# x/ E$ a3 H1 o& n5 c其中表达式{1}的值--->name属性值中第一个*的值。
; }/ a5 J1 k) c* a7 n' X如果用户请求的URL为loginAction.action,则调用LoginRegistAction中的login方法;! W% p0 P; {+ \6 x: `% K' v
如果用户请求的URL为registerAction.action,则调用LoginRegistAction中的register方法;3 S; v& D: }3 p* B$ N9 s
形式二:通过匹配,调用不同的Action的execute方法
$ [2 t, j6 P5 S- M6 L8 ]9 W& Z* _/ P<action name="*Action">: F( t) V) D, {1 @& U% ?3 r
<result name="input">/login.jsp</result>* `6 _* i% M% s. L% M# }% N
<result name="error">/error.jsp</result>
& `: K3 G% U, ]8 W<result name="success">/welcome.jsp</result>
0 \/ `2 p; R. b, J" a, q/ c</action>
: D0 b/ U' Z7 z% |上面没有出现method属性,故默认调用对应的execute方法' _) q( |: [. N
如果用户请求的URL为LoginAction.action,则调用LoginAction中的execute方法;
1 C5 B0 i2 e7 S, y R! k3 F如果用户请求的URL为RegisterAction.action,则调用RegisterAction中的execute方法;
p/ p& e# b) e! |形式三:动态结果
$ w$ _7 K: K4 ^+ t2 M<action name="crud_*" method="{1}">( b# ~! L2 v, V1 }! ~
<result name="input">/input.jsp</result> f& l+ o" A4 ?
<result>/{1}.jsp</result>
3 ]. c: t1 n2 Y1 M</action>
/ E% O% U0 F6 @: D: B/ j当处理结果是success时,+ I* ~3 e+ f) S8 j; u/ D
如果crud_create.action,则会执行CrudAction中的create方法,并且跳转到/create.jsp;6 [* `2 D9 g% U ]: @
如果crud_delete.action,则会执行CrudAction中的delete方法,并且跳转到/delete.jsp; struts2通配符注意事项:最后需要注意的一点是匹配的优先权。
( I0 l: t, e7 q! c5 q' S( F(1)如果struts.xml里面有对应的action name。就算它有其他通配符匹配的,都优先对应完全相同的.
5 {& k, J( b ^, d. t比如,有一个 action name 是 "user_add" 还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " 。其实,这个很好理解。
. y/ a# Q7 @, l' j(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面。它匹配写在前面的
0 U# [7 i" k; @; l1 X3 S- R! B比如 有一个 action name 是 "*_*" 还有一个是 "user_*" 。现在,来一个请求是 "user_add.action "。那么,它会优先匹配写在前面的。
' }, D( g/ I q* Y任何带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高。
( O; t6 U: M; o' n7 {& A$ U |