• 通配符映射:一个Web应用可能有成百上千个action声明,可以使用struts提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系。
  • 通配符映射规则:
  1. 若找到多个匹配,没有通配符的那个将胜出;
  2. 若指定的动作不存在,Struts将会尝试把这URI与任何一个包含着通配符*的动作名进行匹配;
  3. 被通配符匹配的URI字符串的字串可以通过{1}、{2}来引用。{1}匹配第一个子字符串,{2}匹配第二个字串。。。;
  4. {0}匹配整个URI
  5. 若Struts找到的带有通配符的匹配不止一个,则按先后顺序进行匹配;
  6. *可以匹配零个或多个字符,但不包括/字符,如果想把/字符包括在内,需要使用**。如果需要对某个字符进行转义,需要使用\。

如果我们需要一个user的添加,修改,删除,查询操作的struts2的实现,一般情况下我们在struts.xml文件中,需要配置action的映射关系,最直接的配置关系是这样子:

 <?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>
<!-- action路径的扩展名:*.action,*.do,无扩展名 -->
<constant name="struts.action.extension" value="action,do," />
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" /> <package name="default" namespace="/" extends="struts-default">
<action name="user-create" class="com.dx.actions.TestAction" method="create">
<result name="create-success">/WEB-INF/testResult.jsp</result>
</action>
<action name="user-update" class="com.dx.actions.TestAction" method="update">
<result name="update-success">/WEB-INF/testResult.jsp</result>
</action>
<action name="user-delete" class="com.dx.actions.TestAction" method="delete">
<result name="delete-success">/WEB-INF/testResult.jsp</result>
</action>
<action name="user-search" class="com.dx.actions.TestAction" method="search">
<result name="search-success">/WEB-INF/testResult.jsp</result>
</action>
</package> </struts>

我们的index.jsp是一个导航页面:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="user-create">user-create</a><br/>
<a href="user-update">user-update</a><br/>
<a href="user-delete">user-delete</a><br/>
<a href="user-search">user-search</a><br/>
</body>
</html>

testResult.jsp是一个测试显示通用页面:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${requestScope.actionName}
</body>
</html>

我们的com.dx.actions.TestAction是这样来写:

 package com.dx.actions;

 import org.apache.struts2.ServletActionContext;

 public class TestAction {
public String create(){
ServletActionContext.getRequest().setAttribute("actionName", "create-success");
return "create-success";
} public String update(){
ServletActionContext.getRequest().setAttribute("actionName", "update-success");
return "update-success";
} public String delete(){
ServletActionContext.getRequest().setAttribute("actionName", "delete-success");
return "delete-success";
} public String search(){
ServletActionContext.getRequest().setAttribute("actionName", "search-success");
return "search-success";
}
}

测试:

访问:http://localhost:8080/MyStruts003/user-create,页面显示:user-create

访问:http://localhost:8080/MyStruts003/user-update,页面显示:user-update

访问:http://localhost:8080/MyStruts003/user-delete,页面显示:user-delete

访问:http://localhost:8080/MyStruts003/user-search,页面显示:user-search

一切都是我们预期的结果。

但是,我们学习了action配置通配符映射关系之后,发现上边实际上就可以简化很多。

 <?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>
<!-- action路径的扩展名:*.action,*.do,无扩展名 -->
<constant name="struts.action.extension" value="action,do," />
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" /> <package name="default" namespace="/" extends="struts-default">
<!--
<action name="user-create" class="com.dx.actions.TestAction" method="create">
<result name="create-success">/WEB-INF/testResult.jsp</result>
</action>
<action name="user-update" class="com.dx.actions.TestAction" method="update">
<result name="update-success">/WEB-INF/testResult.jsp</result>
</action>
<action name="user-delete" class="com.dx.actions.TestAction" method="delete">
<result name="delete-success">/WEB-INF/testResult.jsp</result>
</action>
<action name="user-search" class="com.dx.actions.TestAction" method="search">
<result name="search-success">/WEB-INF/testResult.jsp</result>
</action>
-->
<action name="user-*" class="com.dx.actions.TestAction" method="{1}">
<result name="{1}-success">/WEB-INF/testResult.jsp</result>
</action>
</package> </struts>

那如果我们就是要对user-list同样规则符合以上规则的页面,但是需要跳转到另外一个页面\WEB-INF\testListResult.jsp进行配置,该怎么配置呢?

index.jsp中添加一行链接html:

     <a href="user-list">user-search</a><br/>

在\WEB-INF下添加页面:testListResult.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>This is testListResult.jsp page</h4>
${requestScope.actionName}
</body>
</html>

修改com.dx.actions.TestAction类,添加list方法:

 public String list(){
ServletActionContext.getRequest().setAttribute("actionName", "list-success"); return "list-success";
}

修改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>
<!-- action路径的扩展名:*.action,*.do,无扩展名 -->
<constant name="struts.action.extension" value="action,do," />
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" /> <package name="default" namespace="/" extends="struts-default">
<!--
<action name="user-create" class="com.dx.actions.TestAction" method="create">
<result name="create-success">/WEB-INF/testResult.jsp</result>
</action>
<action name="user-update" class="com.dx.actions.TestAction" method="update">
<result name="update-success">/WEB-INF/testResult.jsp</result>
</action>
<action name="user-delete" class="com.dx.actions.TestAction" method="delete">
<result name="delete-success">/WEB-INF/testResult.jsp</result>
</action>
<action name="user-search" class="com.dx.actions.TestAction" method="search">
<result name="search-success">/WEB-INF/testResult.jsp</result>
</action>
-->
<action name="user-*" class="com.dx.actions.TestAction" method="{1}">
<result name="{1}-success">/WEB-INF/testResult.jsp</result>
</action>
<action name="user-list" class="com.dx.actions.TestAction" method="list">
<result name="list-success">/WEB-INF/testListResult.jsp</result>
</action>
</package> </struts>

访问页面:http://localhost:8080/MyStruts003/user-list

测试结果:

基于上边的例子,我们是把user-list同user-*位置互换

  <action name="user-list" class="com.dx.actions.TestAction" method="list">
<result name="list-success">/WEB-INF/testListResult.jsp</result>
</action>
<action name="user-*" class="com.dx.actions.TestAction" method="{1}">
<result name="{1}-success">/WEB-INF/testResult.jsp</result>
</action>

,测试的结果和上边的结果是一样的。

Struts(七):action配置文件之通配符映射的更多相关文章

  1. [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. Struts2 - action通配符映射

    一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系 通配符映射规则 –      若找到多个匹配, 没有通 ...

  3. Struts2学习第七课 通配符映射

    一个WEB应用可能有长百上千个action声明,可以利用struts提供的通配符映射机制吧多个彼此相识的映射关系简化为一个映射关系. 通配符映射规则: --若找到多个匹配,没有通配符的那个将胜出(精确 ...

  4. Struts2通配符映射

    1.一个Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系 2.通配符映射规则 –若找到多个匹配, 没有通配符的 ...

  5. struts2的动态方法调用(DMI)和通配符映射

    动态方法调用   1.Struts2默认关闭DMI功能,需要使用需要手动打开,配置常量 struts.enable.DynamicMethodInvocation = true 2.使用“!”方法,即 ...

  6. 2018.12.15 struts.xml 一般配置文件写法 && 配置动态方法

    struts.xml 原始配置文件 配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE s ...

  7. struts2之通配符映射

    系统有n多个请求时候,不可能以一个action对应一个映射.可以用通配符映射将成百上千请求简化成一个通用映射. 通配符映射规则:1.若找到多个匹配,没有通配符的将胜出. 2.若指定的动作不存在,str ...

  8. Url通配符映射

    原文:http://www.cnblogs.com/liukemng/p/3726897.ht 1.URL路径映射 1.1.对一个action配置多个URL映射: 我们把上一篇中的HelloWorld ...

  9. struts2中action中的通配符

    struts中一个正常的最普通不过的action是这样子的 <package name="default1" namespace="/gys" exten ...

随机推荐

  1. 洛谷 P1111 修复公路 Label:并查集

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...

  2. 深入浅出 - Android系统移植与平台开发(七)- 初识HAL

    作者:唐老师,华清远见嵌入式学院讲师. 1. HAL的module与stub HAL(Hardware AbstractLayer)硬件抽象层是Google开发的Android系统里上层应用对底层硬件 ...

  3. row_number() over order by与利用rownum查询分页效率分析

    实际测试: 数据库:70万条数据 查询第10000页,每页10条.row_number() 耗时: 2.2秒rownum 耗时:1.3秒 查询第20000页,每页10条.row_number() 耗时 ...

  4. 在DataGridView控件中加入ComboBox下拉列表框的实现

    在DataGridView控件中加入ComboBox下拉列表框的实现 转自:http://www.cnblogs.com/luqingfei/archive/2007/03/28/691372.htm ...

  5. Centos 6.5 挂载硬盘 4K对齐 (笔记 实测)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Linux centos 2.6.32-431.17.1.el6.x86_64(Centos-6.5-x86_ ...

  6. VMwareTools 安装(VMware Player)

    1. VMare Tools 按钮是灰化的,需要对虚拟机做如下设置:(在虚拟机没有启动的状态下进行)     1)Player(P)->管理->虚拟机设置->CD/DVD  选择:使 ...

  7. .net 实现Office文件预览,word文件在线预览、excel文件在线预览、ppt文件在线预览

    转自源地址:http://www.cnblogs.com/GodIsBoy/p/4009252.html,有部分改动 使用Microsoft的Office组件将文件转换为PDF格式文件,然后再使用pd ...

  8. sizeof运算符和strlen函数的区别

    1.sizeof是运算符,而strlen是函数. 2.sizeof操作符的运算结果为size_t,他在头文件中的typedef为unsigned int.该类型保证能容纳所操作对象的最大字节大小. 3 ...

  9. 3G網絡容量和業務承載的壓力大大增加!

    在移動通信話音業務繼續保持發展的同時,對IP和高速數據業務的支持已經成為移動通信系統演進的方向.移動數據業務是推動目前移動通信技術發展的主要動力,TD-LTE作為準4G技術,以提高數據速率和頻譜利用率 ...

  10. javascript 与jquery为每个p标签增加onclick方法

    <script type="text/javascript"> window.onload=function(){ var items=document.getElem ...