Struts(七):action配置文件之通配符映射
- 通配符映射:一个Web应用可能有成百上千个action声明,可以使用struts提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系。
- 通配符映射规则:
- 若找到多个匹配,没有通配符的那个将胜出;
- 若指定的动作不存在,Struts将会尝试把这URI与任何一个包含着通配符*的动作名进行匹配;
- 被通配符匹配的URI字符串的字串可以通过{1}、{2}来引用。{1}匹配第一个子字符串,{2}匹配第二个字串。。。;
- {0}匹配整个URI
- 若Struts找到的带有通配符的匹配不止一个,则按先后顺序进行匹配;
- *可以匹配零个或多个字符,但不包括/字符,如果想把/字符包括在内,需要使用**。如果需要对某个字符进行转义,需要使用\。
如果我们需要一个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配置文件之通配符映射的更多相关文章
- [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Struts2 - action通配符映射
一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系 通配符映射规则 – 若找到多个匹配, 没有通 ...
- Struts2学习第七课 通配符映射
一个WEB应用可能有长百上千个action声明,可以利用struts提供的通配符映射机制吧多个彼此相识的映射关系简化为一个映射关系. 通配符映射规则: --若找到多个匹配,没有通配符的那个将胜出(精确 ...
- Struts2通配符映射
1.一个Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系 2.通配符映射规则 –若找到多个匹配, 没有通配符的 ...
- struts2的动态方法调用(DMI)和通配符映射
动态方法调用 1.Struts2默认关闭DMI功能,需要使用需要手动打开,配置常量 struts.enable.DynamicMethodInvocation = true 2.使用“!”方法,即 ...
- 2018.12.15 struts.xml 一般配置文件写法 && 配置动态方法
struts.xml 原始配置文件 配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE s ...
- struts2之通配符映射
系统有n多个请求时候,不可能以一个action对应一个映射.可以用通配符映射将成百上千请求简化成一个通用映射. 通配符映射规则:1.若找到多个匹配,没有通配符的将胜出. 2.若指定的动作不存在,str ...
- Url通配符映射
原文:http://www.cnblogs.com/liukemng/p/3726897.ht 1.URL路径映射 1.1.对一个action配置多个URL映射: 我们把上一篇中的HelloWorld ...
- struts2中action中的通配符
struts中一个正常的最普通不过的action是这样子的 <package name="default1" namespace="/gys" exten ...
随机推荐
- 【BZOJ】1109: [POI2007]堆积木Klo
题意 \(n(1 \le n \le 100000)\)个数放在一排,可以一走一些数(后面的数向前移),要求最大化\(a_i=i\)的数目. 分析 分析容易得到一个dp方程. 题解 \(d(i)\)表 ...
- 【JAVA】ConcurrentHashMap
HashTable 写操作时候,Lock全表 源码: public synchronized V put(K key, V value) { // Make sure the value i ...
- hdu1232 并查集
1. hdu1232 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 3.总结:简单并查集 #include<iostream> # ...
- ios推送:本地通知UILocalNotification
Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notificati ...
- Java_动态加载
Java类动态加载(一)——java源文件动态编译为class文件最近在做java动态加载这方面的工作,起初也遇到了很多困难.网上关于这方便的东西很零散,为了便于日后回过头来再看,于是我将这几天的心得 ...
- PHP curl 模拟POST 上传文件(含php 5.5后CURLFile)
<?php /** * Email net.webjoy@gmail.com * author jackluo * 2014.11.21 * */ //* function curl_post( ...
- 再谈Jquery Ajax方法传递到action
原始出处 :http://cnn237111.blog.51cto.com/2359144/984466 本人只是转载 原文如下: 假设 controller中的方法是如下: public Act ...
- Maven进价:Maven的生命周期阶段
一.Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤. Maven的生命周期 ...
- passing ‘const ’ as ‘this’ argument of ‘’ discards qualifiers 错误处理
示例程序: #include <iostream> #include <set> using namespace std ; class StudentT { publ ...
- 重写(Override)与重载(Overload)
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...