struts2的配置文件是 struts.xml,在这个配置文件里面可以使用通配符。其中的好处就是,大大减少了配置文件的内容,当然,相应付出的代价是可读性比较差。 struts2通配符的使用方法:形式一:调用相同Action中的不同方法( ]( r% v0 W* e: p, m; n' J- P
<action name="*Action" method="{1}">
0 Q$ d0 p7 c. V/ X& q<result name="input">/login.jsp</result>
0 z7 f' D0 P1 e5 ?<result name="error">/error.jsp</result>' L; h* _# {, T) \/ e% [
<result name="success">/welcome.jsp</result>5 R! K. G8 }* j( o5 [$ {& X- D( \
</action>
$ w. Q$ S7 [0 p+ g) K' S其中表达式{1}的值--->name属性值中第一个*的值。$ i( E5 }8 c: h( G' ^
如果用户请求的URL为loginAction.action,则调用LoginRegistAction中的login方法;
* g3 J/ _4 u3 r8 n7 c# H如果用户请求的URL为registerAction.action,则调用LoginRegistAction中的register方法;; d- U2 C1 b5 I+ l0 N5 s6 }: S0 t
形式二:通过匹配,调用不同的Action的execute方法
" x Y7 W8 O/ c<action name="*Action">. e8 { L6 g q+ O
<result name="input">/login.jsp</result>
4 N. Y* u$ g" n& ^1 R& k2 v! y, Y<result name="error">/error.jsp</result>
E% m% C" G5 X8 k: T<result name="success">/welcome.jsp</result>; {. p7 P; `7 G( B2 j
</action>$ F, z( B; v) i2 S8 T8 q1 X
上面没有出现method属性,故默认调用对应的execute方法
: m! e: w9 ]( A9 ]! i6 @3 v如果用户请求的URL为LoginAction.action,则调用LoginAction中的execute方法;7 a# j4 z; m. {- N5 N3 W
如果用户请求的URL为RegisterAction.action,则调用RegisterAction中的execute方法;
8 m/ Z/ g6 u, E, W3 b% d# ^形式三:动态结果( Z/ T: M$ s) V! I+ F
<action name="crud_*" method="{1}">& I9 K* C6 `9 \0 c+ X8 ^7 Q
<result name="input">/input.jsp</result>2 ?9 T! S4 s# l) }; f8 X
<result>/{1}.jsp</result>
, j6 M @ `( b6 I+ s0 ^: `9 M0 M& J( Z! [</action>2 B9 T. E( T$ F( T4 A5 R
当处理结果是success时,
' ^, G" q" x% R如果crud_create.action,则会执行CrudAction中的create方法,并且跳转到/create.jsp;$ Y @2 J+ O9 w# Q6 n4 f6 g
如果crud_delete.action,则会执行CrudAction中的delete方法,并且跳转到/delete.jsp; struts2通配符注意事项:最后需要注意的一点是匹配的优先权。
7 y$ `. M5 l! b, ~1 ]5 Y8 A8 ?(1)如果struts.xml里面有对应的action name。就算它有其他通配符匹配的,都优先对应完全相同的.8 k! X3 v2 W" v7 x, h$ v' y
比如,有一个 action name 是 "user_add" 还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " 。其实,这个很好理解。
+ o. U' M% ?: |' C(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面。它匹配写在前面的% L8 \% b/ f* U
比如 有一个 action name 是 "*_*" 还有一个是 "user_*" 。现在,来一个请求是 "user_add.action "。那么,它会优先匹配写在前面的。/ I y7 b) N+ L( h
任何带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高。 $ k, {8 @" T7 g( @& a
|