struts2的配置文件是 struts.xml,在这个配置文件里面可以使用通配符。其中的好处就是,大大减少了配置文件的内容,当然,相应付出的代价是可读性比较差。 struts2通配符的使用方法:形式一:调用相同Action中的不同方法
e3 d. T; L- n' M9 e& y<action name="*Action" method="{1}">, v9 \. d2 p3 G" K
<result name="input">/login.jsp</result>' i/ R0 N# A; n" }4 `- `+ R
<result name="error">/error.jsp</result>
0 ?/ ?+ k2 B; P4 l H' h<result name="success">/welcome.jsp</result>
2 B! j2 p& P* j, P& K7 M6 M) m</action>6 G- Y- N. @$ t' S; i1 R
其中表达式{1}的值--->name属性值中第一个*的值。
- O5 B5 w( N3 t& }如果用户请求的URL为loginAction.action,则调用LoginRegistAction中的login方法;
0 H5 u) j" J/ b1 ]" w5 X如果用户请求的URL为registerAction.action,则调用LoginRegistAction中的register方法;* @2 c8 ~" E* I& v1 Z9 J* u) I3 G2 y
形式二:通过匹配,调用不同的Action的execute方法
9 M$ `, T% r, P<action name="*Action">2 C5 I- m4 C8 x4 o. l3 y) e2 B
<result name="input">/login.jsp</result>+ L/ j9 X; M* \: U/ }
<result name="error">/error.jsp</result>
' g! F5 m2 J# c! k<result name="success">/welcome.jsp</result>7 O' d+ I4 m; @2 N3 Z
</action>3 ~/ n+ w* t; T( E1 B& e
上面没有出现method属性,故默认调用对应的execute方法/ F# W0 h3 O) v: v7 r
如果用户请求的URL为LoginAction.action,则调用LoginAction中的execute方法;
# z, t& _9 d! _8 K0 f. Z3 V如果用户请求的URL为RegisterAction.action,则调用RegisterAction中的execute方法;
1 I( a$ Y6 q, M( F6 _$ [形式三:动态结果1 `8 a8 M% a4 f2 ? t1 m3 `$ G
<action name="crud_*" method="{1}">/ @( X; ~) f% I) ~/ v0 A+ H! Z
<result name="input">/input.jsp</result> B" }8 L; t. R# L
<result>/{1}.jsp</result>
- ?4 Y4 t5 V% c- _</action>
) |8 L, y% F; {# M3 j& E当处理结果是success时,6 J k- [9 N6 C, @5 z1 x
如果crud_create.action,则会执行CrudAction中的create方法,并且跳转到/create.jsp;; r" z. h9 d; S% _
如果crud_delete.action,则会执行CrudAction中的delete方法,并且跳转到/delete.jsp; struts2通配符注意事项:最后需要注意的一点是匹配的优先权。
! ^: A. L0 p* r(1)如果struts.xml里面有对应的action name。就算它有其他通配符匹配的,都优先对应完全相同的.. Q2 i2 V! F/ P! q c! G
比如,有一个 action name 是 "user_add" 还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " 。其实,这个很好理解。
$ B2 j* r2 b) J U* k ^, R- `(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面。它匹配写在前面的3 w6 t; p1 ~) }" y1 S8 y
比如 有一个 action name 是 "*_*" 还有一个是 "user_*" 。现在,来一个请求是 "user_add.action "。那么,它会优先匹配写在前面的。
2 N6 n1 Q( x! O任何带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高。
. J: i. }* u/ s0 P Y1 s |