我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > struts2通配符的使用详解
总共48086条微博

动态微博

查看: 1110|回复: 1

struts2通配符的使用详解

[复制链接]

34

主题

4

听众

110

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2015-04-18 21:00:24 |只看该作者 |倒序浏览

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

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

3

主题

1

听众

122

金钱

四袋长老

该用户从未签到

沙发
发表于 2015-05-14 00:32:34 |只看该作者
终于可以回复了
回复

使用道具 举报

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表