Struts(七):action配置文件之通配符映射
2016-06-21 23:24
369 查看
通配符映射:一个Web应用可能有成百上千个action声明,可以使用struts提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系。
通配符映射规则:
若找到多个匹配,没有通配符的那个将胜出;
若指定的动作不存在,Struts将会尝试把这URI与任何一个包含着通配符*的动作名进行匹配;
被通配符匹配的URI字符串的字串可以通过{1}、{2}来引用。{1}匹配第一个子字符串,{2}匹配第二个字串。。。;
{0}匹配整个URI
若Struts找到的带有通配符的匹配不止一个,则按先后顺序进行匹配;
*可以匹配零个或多个字符,但不包括/字符,如果想把/字符包括在内,需要使用**。如果需要对某个字符进行转义,需要使用\。
如果我们需要一个user的添加,修改,删除,查询操作的struts2的实现,一般情况下我们在struts.xml文件中,需要配置action的映射关系,最直接的配置关系是这样子:
我们的index.jsp是一个导航页面:
testResult.jsp是一个测试显示通用页面:
我们的com.dx.actions.TestAction是这样来写:
测试:
访问: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配置通配符映射关系之后,发现上边实际上就可以简化很多。
那如果我们就是要对user-list同样规则符合以上规则的页面,但是需要跳转到另外一个页面\WEB-INF\testListResult.jsp进行配置,该怎么配置呢?
index.jsp中添加一行链接html:
在\WEB-INF下添加页面:testListResult.jsp
修改com.dx.actions.TestAction类,添加list方法:
修改struts.xml配置文件:
访问页面:http://localhost:8080/MyStruts003/user-list
测试结果:
基于上边的例子,我们是把user-list同user-*位置互换
,测试的结果和上边的结果是一样的。
通配符映射规则:
若找到多个匹配,没有通配符的那个将胜出;
若指定的动作不存在,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>
,测试的结果和上边的结果是一样的。
相关文章推荐
- eclipse4.2(juno)各种插件安装
- 方法重载详解
- Struts2.0工作原理
- eclipse代码自动补全
- Eclipse启动时fail to create Java Virtual Machine问题的解决
- java JWS 应用及实践
- 编程之美2.11寻找最近点对Java版一
- 使用内省的方式操作JavaBean
- Java 学习经验总结
- Java抽象类与接口区别
- Java抽象类与接口区别
- JavaWeb系列(一)——入门篇
- 06.Java 集合 - HashMap
- strut2.0创建过程
- java设计模式--单例模式
- Spring 之 Bean的属性注入
- JAVA反射机制
- Effictive Java 并发摘录
- Struts2系列:(4)使用多个struts配置文件
- struts2 根空间和默认命名空间区别