struts2的配置文件是 struts.xml,在这个配置文件里面可以使用通配符。其中的好处就是,大大减少了配置文件的内容,当然,相应付出的代价是可读性比较差。 struts2通配符的使用方法:形式一:调用相同Action中的不同方法1 h+ y( d. w# K1 l6 |4 e& Y
<action name="*Action" method="{1}">6 K7 k* C. n6 b( O( j9 D
<result name="input">/login.jsp</result>% b3 M+ G& U& k1 q
<result name="error">/error.jsp</result>
9 i2 C0 r3 n% T0 y4 k<result name="success">/welcome.jsp</result>$ t) m; o8 R: f) E& \' E- a L
</action>$ B" }! ]1 s. G! x' D+ l
其中表达式{1}的值--->name属性值中第一个*的值。/ h" j' H6 d) ^! G) A! i: C! ?
如果用户请求的URL为loginAction.action,则调用LoginRegistAction中的login方法;: m2 _8 q. d+ J- Y
如果用户请求的URL为registerAction.action,则调用LoginRegistAction中的register方法;1 i# b" W' g) q" O+ Q2 H
形式二:通过匹配,调用不同的Action的execute方法1 ]3 u! [/ T6 q: X! o/ z
<action name="*Action">
( i" l" D+ g# V* S$ H! B3 G<result name="input">/login.jsp</result> i; k7 D- Z. s& E9 i
<result name="error">/error.jsp</result>
" j3 H9 P! K! j3 a8 l* z<result name="success">/welcome.jsp</result>
3 M9 u- P8 C' J6 h</action>3 {: J5 y; D1 |& P' W7 `
上面没有出现method属性,故默认调用对应的execute方法' B' W, {: {, ?/ m( j
如果用户请求的URL为LoginAction.action,则调用LoginAction中的execute方法;7 M8 J5 B; q2 X1 X w8 F
如果用户请求的URL为RegisterAction.action,则调用RegisterAction中的execute方法;9 P/ q: B3 c: d
形式三:动态结果# }6 {- P; \* { ]
<action name="crud_*" method="{1}">
* _! X J3 J2 Q2 i$ H9 ~<result name="input">/input.jsp</result>3 v$ I9 G- z0 e, l- U: p- I) W9 P
<result>/{1}.jsp</result>
, f) \- y: c8 W& \1 H8 \</action>
3 y# v; H. E: G- O当处理结果是success时,
7 ^( C1 A1 M X; s; H( j/ E C如果crud_create.action,则会执行CrudAction中的create方法,并且跳转到/create.jsp;
# p9 ]" R& e6 r/ C& ]如果crud_delete.action,则会执行CrudAction中的delete方法,并且跳转到/delete.jsp; struts2通配符注意事项:最后需要注意的一点是匹配的优先权。; m0 w2 w6 _. J1 X( m& A
(1)如果struts.xml里面有对应的action name。就算它有其他通配符匹配的,都优先对应完全相同的.' ~3 h" \$ p+ k* x8 W
比如,有一个 action name 是 "user_add" 还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " 。其实,这个很好理解。
5 w" f, ^; O$ t+ x6 n(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面。它匹配写在前面的! A( j9 a T* H
比如 有一个 action name 是 "*_*" 还有一个是 "user_*" 。现在,来一个请求是 "user_add.action "。那么,它会优先匹配写在前面的。
% Z3 l! S4 o# R任何带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高。 ( |5 x( H( f9 M! w
|