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

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

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5
 6 <struts>
 7     <!-- action路径的扩展名:*.action,*.do,无扩展名 -->
 8     <constant name="struts.action.extension" value="action,do," />
 9     <constant name="struts.enable.DynamicMethodInvocation" value="false" />
10     <constant name="struts.devMode" value="false" />
11
12     <package name="default" namespace="/" extends="struts-default">
13         <action name="user-create" class="com.dx.actions.TestAction" method="create">
14             <result name="create-success">/WEB-INF/testResult.jsp</result>
15         </action>
16         <action name="user-update" class="com.dx.actions.TestAction" method="update">
17             <result name="update-success">/WEB-INF/testResult.jsp</result>
18         </action>
19         <action name="user-delete" class="com.dx.actions.TestAction" method="delete">
20             <result name="delete-success">/WEB-INF/testResult.jsp</result>
21         </action>
22         <action name="user-search" class="com.dx.actions.TestAction" method="search">
23             <result name="search-success">/WEB-INF/testResult.jsp</result>
24         </action>
25     </package>
26
27 </struts>

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

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

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

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

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

 1 package com.dx.actions;
 2
 3 import org.apache.struts2.ServletActionContext;
 4
 5 public class TestAction {
 6     public String create(){
 7         ServletActionContext.getRequest().setAttribute("actionName", "create-success");
 8         return "create-success";
 9     }
10
11     public String update(){
12         ServletActionContext.getRequest().setAttribute("actionName", "update-success");
13         return "update-success";
14     }
15
16     public String delete(){
17         ServletActionContext.getRequest().setAttribute("actionName", "delete-success");
18         return "delete-success";
19     }
20
21     public String search(){
22         ServletActionContext.getRequest().setAttribute("actionName", "search-success");
23         return "search-success";
24     }
25 }

测试:

访问: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配置通配符映射关系之后,发现上边实际上就可以简化很多。

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5
 6 <struts>
 7     <!-- action路径的扩展名:*.action,*.do,无扩展名 -->
 8     <constant name="struts.action.extension" value="action,do," />
 9     <constant name="struts.enable.DynamicMethodInvocation" value="false" />
10     <constant name="struts.devMode" value="false" />
11
12     <package name="default" namespace="/" extends="struts-default">
13     <!--
14         <action name="user-create" class="com.dx.actions.TestAction" method="create">
15             <result name="create-success">/WEB-INF/testResult.jsp</result>
16         </action>
17         <action name="user-update" class="com.dx.actions.TestAction" method="update">
18             <result name="update-success">/WEB-INF/testResult.jsp</result>
19         </action>
20         <action name="user-delete" class="com.dx.actions.TestAction" method="delete">
21             <result name="delete-success">/WEB-INF/testResult.jsp</result>
22         </action>
23         <action name="user-search" class="com.dx.actions.TestAction" method="search">
24             <result name="search-success">/WEB-INF/testResult.jsp</result>
25         </action>
26          -->
27          <action name="user-*" class="com.dx.actions.TestAction" method="{1}">
28             <result name="{1}-success">/WEB-INF/testResult.jsp</result>
29         </action>
30     </package>
31
32 </struts>

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

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

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

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

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

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

1 public String list(){
2         ServletActionContext.getRequest().setAttribute("actionName", "list-success");
3
4         return "list-success";
5     }

修改struts.xml配置文件:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5
 6 <struts>
 7     <!-- action路径的扩展名:*.action,*.do,无扩展名 -->
 8     <constant name="struts.action.extension" value="action,do," />
 9     <constant name="struts.enable.DynamicMethodInvocation" value="false" />
10     <constant name="struts.devMode" value="false" />
11
12     <package name="default" namespace="/" extends="struts-default">
13     <!--
14         <action name="user-create" class="com.dx.actions.TestAction" method="create">
15             <result name="create-success">/WEB-INF/testResult.jsp</result>
16         </action>
17         <action name="user-update" class="com.dx.actions.TestAction" method="update">
18             <result name="update-success">/WEB-INF/testResult.jsp</result>
19         </action>
20         <action name="user-delete" class="com.dx.actions.TestAction" method="delete">
21             <result name="delete-success">/WEB-INF/testResult.jsp</result>
22         </action>
23         <action name="user-search" class="com.dx.actions.TestAction" method="search">
24             <result name="search-success">/WEB-INF/testResult.jsp</result>
25         </action>
26          -->
27          <action name="user-*" class="com.dx.actions.TestAction" method="{1}">
28             <result name="{1}-success">/WEB-INF/testResult.jsp</result>
29         </action>
30          <action name="user-list" class="com.dx.actions.TestAction" method="list">
31             <result name="list-success">/WEB-INF/testListResult.jsp</result>
32         </action>
33     </package>
34
35 </struts>

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

测试结果:

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

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

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

转载于:https://www.cnblogs.com/yy3b2007com/p/5605409.html

Struts(七):action配置文件之通配符映射相关推荐

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

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

  2. Struts2通配符映射/Struts action name=/*/* method={2} class=com.jxc.action.{1}Action result

    struts2的关于method="{1}"意思详解 <action   name= "Login_* "   method= "{1} &qu ...

  3. Struts2 学习系列 (3) 跳转类型与通配符映射

    2019独角兽企业重金招聘Python工程师标准>>> 跳转类型 chain:Action链式处理的结果类型,也就是将结果转发到这个action中. chart:整合JFreeCha ...

  4. struts一个action处理多个方法

    2019独角兽企业重金招聘Python工程师标准>>> 在前面的介绍中,我们了解了struts的action是实现execute()方法来完成业务逻辑的,可是,在实际开发中,让一个业 ...

  5. struts 1.2配置文件

    struts 1.2配置文件 2011-07-19 19:59 49人阅读 评论(0) 收藏 举报      Struts中是apache组织的MVC框架 下表列出了Struts中用到的lib包及其用 ...

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

    动态方法调用 1.Struts2默认关闭DMI功能,需要使用需要手动打开,配置常量 [html] view plaincopy struts.enable.DynamicMethodInvocatio ...

  7. 12.Struts2_通配符映射

    1.通配符映射: 一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系 如: <action name ...

  8. Java Spring Boot VS .NetCore (七) 配置文件

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  9. struts中action名称反复导致的神秘事件

    近期由于项目需求变更.须要本人对当中的某个业务功能进行改动.本人依照前台页面找action,依据action找代码的逻辑进行了改动(公司项目是ssh框架,struts配置全部是通过注解的方式进行.配置 ...

最新文章

  1. Python基础教程:strip 函数踩坑
  2. 怎么用计算机算亩数,怎样用手机测量亩数?
  3. Hadoop RPC实例
  4. 拼多多:有营销号“骗粉博出位” 将用法律武器维权
  5. 物联网工程实践第二次课堂笔记
  6. 1811114每日一句
  7. Unity3D Asset文件导出3DMax 可编辑格式
  8. 大厂是怎样对待线上故障的?
  9. BMS专题之BMS的分类与功能
  10. 计算机mac地址怎么修改密码,如何修改苹果电脑mac地址?
  11. 《中国人史纲》读书笔记:第八章、第九章 公元前第六、五世纪
  12. .Net6.0系列-6 .Net 6LinQ(二)常用扩展方法
  13. 25 Three.js的点光源THREE.PointLight
  14. Mysql序号 查询
  15. 头脑王者小程序开发源码分析
  16. TrueCrypt 6.2a原理及代码分析
  17. Lesson_3 作业_1 ---- 十六进制转换器
  18. magnify.m —— 图像局部放大镜工具函数
  19. 安装教程之PyCharm安装
  20. 父盒子塌陷问题解决办法

热门文章

  1. 中国工程院2019年院士增选第二轮候选人名单公布 李彦宏落选
  2. 计算机科学与技术在线阅读,TL2011计算机科学与技术.pdf
  3. 【c语言训练】大,小写问题,【C语言训练】大、小写问题 (C语言代码)
  4. 服务器损坏文件怎么办,服务器文件系统损坏的处理
  5. mysql 开户机构_mysql开户、权限设置、建库流程及常用操作
  6. 024_JDK的equals方法
  7. 虚拟服务器设置upnp,TP-Link路由器如何设置UPNP开启【设置步骤】
  8. python图像分类实验总结_图像分类的5种技术,总结并归纳算法、实现方式,并进行实验验证...
  9. Java内部类作用全解
  10. Android Studio 更新失败解决方法