1、一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系
(就是一个action类里面包含多个能被不同action调用的方法的时候,用通配符就能简化为一个通用的映射关系,即配置一个就完成struts.xml对应映射的设置)

2、通配符规则
- (1)如果找到多个匹配,则没有用通配符的优先使用
- (2)如果找不到指定的匹配,Struts2会尝试把这个 URL 与任何一个有通配符 * 的action名进行匹配
- (3)被通配符匹配到的URL字符串子串可以用{1} {2}来引用,数字从1开始算
- (4)用{0}匹配整个字符串
- (5)如果找到多个带通配符的匹配,则按照先后顺序进行匹配
- (6)可以匹配多个字符,但是如果要包含 / 则需要使用两个 替换 / ,字符转义就用 \ + 需要转义的字符

3、项目目录

4、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="action,do,"></constant><constant name="struts.enable.DynamicMethodInvocation" value="true"></constant><package name="default" namespace="/" extends="struts-default"><action name="*_*" class="com.demo.sshtest.WildcardTest" method="{1}_{2}"><result>/{1}_{2}1.jsp</result></action></package>
</struts>

将要调用的action名:Test_One、Test_Two 、Test_Three
将要调用的方法名:Test_One、Test_Two、Test_Three
name: name中用了两个通配符,用于分别匹配action名中的Test和One/Two/Three
class:要被调用的action类的包名+类名
method:action类中被调用的方法的方法名,两个通配符用于匹配方法名中的Test和One/Two/Three
result:里面的{1}代表第一个通配符替代的Test,{2}代表第二个通配符替代的One/Two/Three

5、action类

package com.demo.sshtest;public class WildcardTest {public int pid = 0;public String pName = "";public int getPid() {return pid;}public void setPid(int pid) {this.pid = pid;}public String getpName() {return pName;}public void setpName(String pName) {this.pName = pName;}public String Test_One(){System.out.println(">>>into TestOne");System.out.println("pid:"+getPid()+" pName:"+getpName());return "success";}public String Test_Two(){System.out.println(">>>into TestTwo");System.out.println("pid:"+getPid()+" pName:"+getpName());return "success";}public String Test_Three(){System.out.println(">>>into TestThree");System.out.println("pid:"+getPid()+" pName:"+getpName());return "success";}
}

注意方法名字要对应struts.xml配置的就可以了

6、调用action的页面

<%@ 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>
<script>
function changeaction(){var obj = document.getElementById("pid");var index = obj.selectedIndex;var text = obj.options[index].text;var value = obj.options[index].value;if(1==value){document.getElementById("ActionForm").action="Test_One.action";}else if(2==value){document.getElementById("ActionForm").action="Test_Two.action";}else if(3==value){document.getElementById("ActionForm").action="Test_Three.action";}
}
</script>
</head>
<body><form method="post" id="ActionForm" name="ActionForm" action="Test_One.action"><select id="pid" name="pid" onChange="changeaction()"><option value="1" select>1</option><option value="2">2</option><option value="3">3</option></select><input type="text" id="pName" name="pName" value="pName"><input type="submit" id="submit" name="submit" value="submit"></form>
</body>
</html>

这里的action名写清楚就好了

7、结果跳转页面Test_One1.jsp、Test_Two1.jsp、Test_Three1.jsp(三个页面内容相同,只是用来测试result会不会对应不同{}来跳转)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<% request.setCharacterEncoding("UTF-8"); %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test_One1</title>
</head>
<body>Test_One1<br><br>pid: ${pid }   <!--${} 这种表达方式叫做EL,仅仅是表达式--><br><br>pName: ${pName }<br><br>pid: <%=request.getParameter("pid") %><br><br>pName: <%=request.getParameter("pName") %><br><br>
</body>
</html>

8、注意事项:
- 配置多少个通配符,{}就有多少个数,不管什么位置,第一个出现的通配符就用{1}表示,如此类推
- {0}就表示通配整个名
- result标签不写name的时候,action类里面对应方法的返回值都要是success,不然会说没有定义name的值
- {}外面能添加任何字符串,反正不影响使用、跟对应方法名或者jsp页面文件名对应就可以了 如:{}_{}1.jsp,添加了1是不影响的,只要对应好jsp文件名就可以了

SSH笔记-Struts2的通配符相关推荐

  1. SSH笔记-Struts2的语言国际化

    1.配置国际化资源文件 四种方法 1.action范围资源文件:在action类所在路径建立 actionname_language_country.properties,适用于指定action类 如 ...

  2. 基于SSH(Spring+Struts2+Hibernate)开发健身俱乐部会员管理系统

    你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,或者需要毕业设计项目,大作业指导,购买付费源码等,欢迎指教: 企鹅:869192208 文章目录 一.开发背景 二. 需求分析 ...

  3. [JavaWeb基础] 018.Struts2 Action通配符使用

    Struts2中有一个很牛逼的action通配符,可以用来简化action配置,以我们将要讲解的案例来说,如果我们要对一个学生信息进行增加,删除,修改,那么按照原来的做法,我们需要写3个Action来 ...

  4. maven hibernat mysql_手把手教你用 maven 搭建 SSH (struts2 +hibernate5 + spring5) 项目

    手把手教你搭建 SSH 环境 一.项目环境搭建 1.1 配置 Spring 坐标依赖 1.2 配置 hibernate 坐标依赖 1.3 配置 struts2 坐标依赖 1.4 配置Java EE 坐 ...

  5. java刘保_[SSH] Eclipse+Struts2的简单应用

    终于要开始研究框架了,没有大神的指导,只能自己上网摸索着来,没有唯一对的方案,只能找到最适合自己的就可以了. 首先整理一下,代码是参考别人的代码,按照别人的版本有问题,大概整理了一下,自己重新弄了一个 ...

  6. Struts2的通配符配置方式

    Struts2的Action类很有意思,你可以使用3种方式来实现具体的Action类: 让你的Action类继承自ActionSupport类(项目中最常用这种方式,因为ActionSupport类中 ...

  7. struts2的通配符和动态方法调用

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC     &quo ...

  8. struts2.5通配符使用异常

    使用如下方式配置struts.xml文件时,报错 <package name="default" namespace="/" extends=" ...

  9. MyEclipse搭建SSH(Struts2+Spring2+Hibernate3)框架项目教程

    对Struts.spring.hibernate大体上了解一遍后,就是针对这个几个框架的整合了. 怎样整合,请看以下: 第一:Struts2的jar和xml配置文件: jar包: commons-fi ...

最新文章

  1. Ubuntu安装TensorFlow-gpu及cuda9.0(不给自己找麻烦)
  2. BlogEngine.NET1.2的新功能
  3. 关闭占用某一端口号的进程 win10
  4. 使用CoreRT将.NET Core发布为Native应用程序
  5. Linux如何统计进程的CPU利用率
  6. matlab 可视化界面,Matlab?的可视化界面设计
  7. 一开电脑都是广告,请问怎么永久关闭?
  8. Windows 下mysqldump备份1045错误解决办法
  9. java 接口可以被继承_接口能被继承吗?
  10. C语言——变量篇(一)变量关键字static、auto、extern、register
  11. c# 如何抓微信把柄_抓住把柄表情包 - 抓住把柄微信表情包 - 抓住把柄QQ表情包 - 发表情 fabiaoqing.com...
  12. [环境搭建]Windows下安装Ruby和Jekyll
  13. 在LaTeX中使用Python highlighting in LaTeX让python代码高亮
  14. Mysql常用函数大全(分类汇总讲解)
  15. 机器学习防止模型过拟合的方法知识汇总
  16. Labview心电信号处理
  17. 细数常用的5款Java代码混淆器!
  18. 关于《error: 函数“int main(void)”已有主体》的错误
  19. android 实现谷歌地图
  20. linux红帽子怎么配置dhcp,红帽7 配置dhcp服务器

热门文章

  1. 陷入“产品纠结”的王振滔,与学不来波司登的奥康
  2. 甘超波:NLP瞬间亲和力
  3. 计算机无法启动 主板,主板问题导致电脑无法启动的排查方法
  4. 文章生成器(单文件java版)
  5. 基于php中医药资讯网站管理系统源码获取
  6. 【链接】深入理解PLT表和GOT表
  7. 如何借电子印章助力印章管理安全高效?
  8. 桌面只计算机图标发白,电脑桌面上的文件夹变成白色的图标如何解决
  9. 用vue仿贝壳地图找房功
  10. matplotlib 绘制实时动态曲线图