概述
- 一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系
- 通配符映射规则
- 若找到多个匹配, 没有通配符的那个将胜出
- 若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配
- 被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…
- {0} 匹配整个 URI
- 若 Struts 找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配
- 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 .
测试代码
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 配置请求后缀名 -->
<constant name="struts.action.extension" value="do,,action"/>
<!-- 配置包信息 -->
<package name="default" extends="struts-default">
<!-- 4.通配符下存在多个匹配,按顺序匹配 -->
<action name="UserAction-up*" class="top.itcourse.wildcard.UserAction" method="test">
<result name="test-success">test.jsp</result>
</action>
<!--
说明:
1.在action的统配部分使用*
2.在后面需要使用统配的实际值的时候,使用{x} (x表示第几个*,{0}表示整个uri)
3.若被多个匹配,没有通配符的比用通配符的优先
4.通配符下存在多个匹配,按顺序匹配
5.想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.
-->
<!-- 1.在action的统配部分使用* -->
<action name="UserAction-*" class="top.itcourse.wildcard.UserAction" method="{1}">
<!-- 2.在后面需要使用统配的实际值的时候,使用{1} -->
<result name="{1}-success">success.jsp</result>
</action>
<!-- 3.若被多个匹配,没有通配符的比用通配符的优先 -->
<action name="UserAction-save" class="top.itcourse.wildcard.UserAction" method="test">
<result name="test-success">test.jsp</result>
</action>
</package>
</struts>
UserAction.java
package top.itcourse.wildcard;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
public class UserAction implements ServletRequestAware {
private HttpServletRequest request;
public String test() {
System.out.println("测试一下");
return "test-success";
}
public String save() {
System.out.println("保存~~~");
request.setAttribute("result", "save");
return "save-success";
}
public String update() {
System.out.println("修改~~~");
request.setAttribute("result", "update");
return "update-success";
}
public String delete() {
System.out.println("删除~~~");
request.setAttribute("result", "delete");
return "delete-success";
}
public String query() {
System.out.println("查询~~~");
request.setAttribute("result", "query");
return "query-success";
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
}
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>2017</title>
<!-- 导入jQuery文件 -->
<script src="js/jquery-1.10.1.js" type="text/javascript" charset="utf-8"></script>
<!-- script书写位置 -->
<script type="text/javascript">
</script>
</head>
<body>
<a href="UserAction-save">保存</a>
<br />
<a href="UserAction-delete">删除</a>
<br />
<a href="UserAction-query">查询</a>
<br />
<a href="UserAction-update">修改</a>
</body>
</html>
效果
其它
关注下方公众号,回复:struts2_course.code
欢迎加入交流群:451826376
更多信息:www.itcourse.top