struts2的配置文件是 struts.xml,在这个配置文件里面可以使用通配符。其中的好处就是,大大减少了配置文件的内容,当然,相应付出的代价是可读性比较差。 struts2通配符的使用方法:形式一:调用相同Action中的不同方法1 G, d: z. M3 w* Y2 `4 b
<action name="*Action" method="{1}">
/ i* V9 b& C# b u9 K* m<result name="input">/login.jsp</result>
3 W: Z' Z& P; M1 c0 y3 n5 O" X* {/ C<result name="error">/error.jsp</result> o9 G" O) i- X, m/ `9 d: Y5 i
<result name="success">/welcome.jsp</result>
7 s1 M2 o. }! T( ?$ j y i</action>8 v0 T5 J( D# w4 }% R2 [1 M
其中表达式{1}的值--->name属性值中第一个*的值。! p" ~( a! e9 S4 o$ _2 G- `& f
如果用户请求的URL为loginAction.action,则调用LoginRegistAction中的login方法;# M/ w2 h: T: I+ T$ f6 Q: f% S
如果用户请求的URL为registerAction.action,则调用LoginRegistAction中的register方法;
! [) k$ g9 s1 x5 C形式二:通过匹配,调用不同的Action的execute方法4 {- L5 b: U; K& j! Z
<action name="*Action">
: ?9 T. E5 t3 z' L. |<result name="input">/login.jsp</result>
. e$ L; C4 U' O5 Y+ Z. I; f' {<result name="error">/error.jsp</result>9 r3 z: H4 u$ F* I; `
<result name="success">/welcome.jsp</result>* H7 S" D# w) d5 h
</action>
$ e/ O/ [- c2 @4 Q3 |上面没有出现method属性,故默认调用对应的execute方法
* V3 X: k- `4 X( y如果用户请求的URL为LoginAction.action,则调用LoginAction中的execute方法;
( O; w6 g* {: Q; B$ f' J如果用户请求的URL为RegisterAction.action,则调用RegisterAction中的execute方法;
# ?+ H5 u; J; c) x形式三:动态结果: y' ^8 ~1 u- f, A, B8 O5 ?
<action name="crud_*" method="{1}">
9 c0 |. X" U7 f9 M4 f. C9 e<result name="input">/input.jsp</result> }- h/ }4 G+ _$ T
<result>/{1}.jsp</result>
# M1 `, k- c1 g3 f9 j7 w</action>
6 [ a6 R% B4 P0 w) H: E9 d当处理结果是success时,
! ]) Y9 A. Q. m+ w* P4 t0 v如果crud_create.action,则会执行CrudAction中的create方法,并且跳转到/create.jsp;! ?9 w" y' i9 W9 q. n
如果crud_delete.action,则会执行CrudAction中的delete方法,并且跳转到/delete.jsp; struts2通配符注意事项:最后需要注意的一点是匹配的优先权。; i. D7 o# C: |& j3 \* b2 ~
(1)如果struts.xml里面有对应的action name。就算它有其他通配符匹配的,都优先对应完全相同的.
# e. }& C' n. @7 g6 [比如,有一个 action name 是 "user_add" 还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " 。其实,这个很好理解。$ b' ~( ^( W3 a0 ]( N9 o
(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面。它匹配写在前面的2 b$ H; g- `: |% X( M
比如 有一个 action name 是 "*_*" 还有一个是 "user_*" 。现在,来一个请求是 "user_add.action "。那么,它会优先匹配写在前面的。+ P5 ?1 N' k3 C8 M
任何带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高。
. E8 T- J8 H$ Q' O0 F |