struts2的配置文件是 struts.xml,在这个配置文件里面可以使用通配符。其中的好处就是,大大减少了配置文件的内容,当然,相应付出的代价是可读性比较差。 struts2通配符的使用方法:形式一:调用相同Action中的不同方法: _) d$ ?. e; I, s! _* ]
<action name="*Action" method="{1}">
* C* G' h1 y6 S; \) \% r<result name="input">/login.jsp</result>
6 T- n- T* ` U0 ]7 \8 L5 }, P8 o! }+ g<result name="error">/error.jsp</result>1 e$ I$ z1 }& u. `, r
<result name="success">/welcome.jsp</result># g. _ z2 h8 N0 `: F$ [3 G+ H7 N
</action>7 T4 t& [) I1 [1 Z& t2 M
其中表达式{1}的值--->name属性值中第一个*的值。" T' F0 e$ }) W* ^, |7 u$ K
如果用户请求的URL为loginAction.action,则调用LoginRegistAction中的login方法;* J# l$ }$ R8 K( y, f
如果用户请求的URL为registerAction.action,则调用LoginRegistAction中的register方法;
" d5 h' p( m# g$ R, j) Y形式二:通过匹配,调用不同的Action的execute方法
1 ?: R% P1 Q6 h. j8 p# s9 V9 w5 U<action name="*Action">/ I" i, p2 N6 P! J' T
<result name="input">/login.jsp</result>5 w* K+ L8 J( ~8 T3 D9 I6 v8 D
<result name="error">/error.jsp</result>
! r! x% n, A& B S9 {: _7 {- b- m<result name="success">/welcome.jsp</result>
, f, w) k+ d# z# {</action>
b7 K e K/ i上面没有出现method属性,故默认调用对应的execute方法
; w) l* K6 t9 v( r7 D如果用户请求的URL为LoginAction.action,则调用LoginAction中的execute方法;/ i; t. C) S, i) L9 L2 j4 c
如果用户请求的URL为RegisterAction.action,则调用RegisterAction中的execute方法;3 N4 {7 I& @% g
形式三:动态结果7 R9 ]5 R: Z& G6 y+ l6 @
<action name="crud_*" method="{1}">
" s( K. u( o8 p0 A! H<result name="input">/input.jsp</result>4 i( M2 ~; |2 K! J
<result>/{1}.jsp</result>
6 }0 _+ `9 Q: Q3 ~</action>( ?2 x4 o, z5 ?
当处理结果是success时, W3 F u- Q% K" P# Q/ e
如果crud_create.action,则会执行CrudAction中的create方法,并且跳转到/create.jsp;
, i3 K: Z! o7 k如果crud_delete.action,则会执行CrudAction中的delete方法,并且跳转到/delete.jsp; struts2通配符注意事项:最后需要注意的一点是匹配的优先权。0 B) `- r) w& s* j/ E4 a8 y
(1)如果struts.xml里面有对应的action name。就算它有其他通配符匹配的,都优先对应完全相同的.1 J1 y/ B) [2 W, e. k$ r
比如,有一个 action name 是 "user_add" 还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " 。其实,这个很好理解。
( c9 E* j) {* R* d(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面。它匹配写在前面的
$ ^0 l. \' Y; h5 E0 F! L2 X! U比如 有一个 action name 是 "*_*" 还有一个是 "user_*" 。现在,来一个请求是 "user_add.action "。那么,它会优先匹配写在前面的。9 T; z) L1 ^1 q, g" [1 z! h$ p0 l
任何带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高。
. ]: V: T( i( F% G( P1 u1 }5 F |