【张冰Struts2学习札记】0601.struts.xml配置详解之六 Action配置3 通配符
struts.xml 配置详解之六 通配符
1. Action 配置
1.7 、通配符映射
通配符样式:可以包含一个或多个下列特殊记号 |
|
特殊记号 |
说明 |
* |
匹配0 个或多个字符,斜线(/ )字符除外 |
** |
匹配0 个或多个字符,包含斜线(/ )字符 |
\ |
反斜线字符被用作转义序列,因此'\*' 匹配星号(* )字符,'\\' 匹配反斜线(\ )字符 |
示例:
代码清单 1 : UserAction.java 片段
public class UserAction extends ActionSupport {
public String add() {
System.out .println("add 方法被调用 " );
return SUCCESS ;
}
public String del() {
System.out .println("del 方法被调用 " );
return SUCCESS ;
}
public String modify() {
System.out .println("modify 方法被调用 " );
return SUCCESS ;
}
public String query() {
System.out .println("query 方法被调用 " );
return SUCCESS ;
}
}
代码清单 2 : MP3Action.java 片段
public class MP3Action extends ActionSupport {
public String add() {
System.out .println("add 方法被调用 " );
return SUCCESS ;
}
public String del() {
System.out .println("del 方法被调用 " );
return SUCCESS ;
}
public String modify() {
System.out .println("modify 方法被调用 " );
return SUCCESS ;
}
public String query() {
System.out .println("query 方法被调用 " );
return SUCCESS ;
}
}
jsp 访问代码
代码清单 3 : main.jsp 片段
< a href = " <%= path %> /add_User.action" > 增加 User </ a >
< br />
< a href = " <%= path %> /del_User.action" > 删除 User </ a >
< br />
< a href = " <%= path %> /modify_User.action" > 修改 User </ a >
< br />
< a href = " <%= path %> /query_User.action" > 查询 User </ a >
< br />
< br />
< a href = " <%= path %> /add_MP3.action" > 增加 MP3 </ a >
< br />
< a href = " <%= path %> /del_MP3.action" > 删除 MP3 </ a >
< br />
< a href = " <%= path %> /modify_MP3.action" > 修改 MP3 </ a >
< br />
< a href = " <%= path %> /query_MP3.action" > 查询 MP3 </ a >
< br />
在action 映射和action 结果中:
1、 通配符匹配的值 可以用记号{N} 来访问,N 是第1 到9 的数字,指出替换 的是哪一个通配符 匹配的值。
2、 整个请求URI 用记号{0} 来访问。
代码清单 3 : struts.xml 片段
<package name="login" extends="struts-default">
<action name="*_*" class="com.coderdream.action.{2}Action"
method="{1}">
<result name="success">/WEB-INF/msg/{0}Suc.jsp </result>
</action>
</package>
详细解析:
1、 当请求“/add_User.action ” 时,name 中的第一个星“* ”匹配方法add ,第二个星“* ”匹配Action 名User ,所以会访问UserAction 中的add 方法 ;
2、 结果映射中使用的记号是{0} ,于是被整个请求URI (即add_User )替换,所以会访问add_User Suc.jsp 页面 。
注意点:
1、 如果要使用多个通配符,要用下划线(_ ) 隔开;
2、 不同的方法 可以映射不同的结果 ,这比动态方法调用更灵活(动态方法调用 只能访问同一个结果 )
3、 多个action 映射 可以匹配同一个请求 :
代码清单 4 : struts-1.xml 片段
< package name = "login" extends = "struts-default" >
<!-- 1 、全通配符 -->
< action name = "*" class = "com.coderdream.action.UserAction" >
< result name = "success" > /WEB-INF/msg/starSuc.jsp </ result >
</ action >
<!-- 2 、部分通配符 -->
< action name = "*User" class = "com.coderdream.action.EditUserAction" >
< result name = "success" > /WEB-INF/msg/editUserSuc.jsp </ result >
</ action >
<!-- 3 、无通配符 -->
< action name = "addUser"
class = "com.coderdream.action.AddUserAction" >
< result name = "success" > /WEB-INF/msg/addUserSuc.jsp </ result >
</ action >
</ package >
1) 当请求“/addUser ”时,框架优先 匹配无通配符 的action ,此处会匹配AddUserAction ;
2) 当请求“/queryUser ”时,框架按出现顺序 匹配通配符的action ,此处会匹配UserAction ,而不会匹配EditUserAction ;
3) 所以如果想让使用“部分通配符 ”的action 被访问,“全通配符” 的配置应该放在最后 。
我的联系方式: 85337464
我的博客: http://coderdream.iteye.com