Struts2学习笔记(五):struts2通配符用法示例

本文主要介绍struts2配置文件中通配符的用法。

先来看一个简单的需求,index.jsp中有四个链接。

<a href="Action1_add">add1</a>
<br/><br/>
<a href="Action1_del">del1</a> 
<br/><br/>
<a href="Action2_add">add2</a> 
<br/><br/>
<a href="Action2_del">del2</a> 
<br/><br/>

按照之前的介绍,strut.xml文件中需要写四个对应的action来进行响应,随着项目规模的逐渐扩大,需要的action数量会急剧增加,这样会导致struts.xml文件就会非常庞大。在这种背景下,通配符应运而生。上面四个action用一个共同点就是都是用“类名_方法名”的方式进行命名的,这样我们就可以用“*_*”来代替这四个action。

<struts>

	<constant name="struts.action.extension" value="action,do,"/>

	<package name="default" extends="struts-default" namespace="/">

		<action name="*_*" class="com.jiajia.actions.{1}" method="{2}">
			<result>pages/success.jsp</result>
		</action>
		
	</package>
	
</struts>
上面的配置文件中有两个“*”号,每个"*"代表一个字符串,在后面需要引用这些字符串时,{1}代表第一个“*”,{2}代表第二个“*”,在这种配置下,这一个action就可以对应上面的四个请求。

action文件的代码为:

package com.jiajia.actions;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

public class Action1 implements ServletRequestAware{

	HttpServletRequest request;

	public String add(){
		request.setAttribute("msg", "add1");
		return "success";
	}
	
	public String del(){
		request.setAttribute("msg", "del1");
		return "success";
	}

	@Override
	public void setServletRequest(HttpServletRequest arg0) {
		this.request = arg0;
	}

}
package com.jiajia.actions;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

public class Action2 implements ServletRequestAware{

	HttpServletRequest request;

	public String add(){
		request.setAttribute("msg", "add2");
		return "success";
	}
	
	public String del(){
		request.setAttribute("msg", "del2");
		return "success";
	}

	@Override
	public void setServletRequest(HttpServletRequest arg0) {
		this.request = arg0;
	}

}
这里附上尚硅谷佟刚老师总结的几个通配符的使用规则,具体的测试大家可以仿照上面的例子进行。

通配符映射规则:
–若找到多个匹配, 没有通配符的那个将胜出
–若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配 
–被通配符匹配到的URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…
–{0}匹配整个 URI
–若 Struts 找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配
–* 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.

完整示例代码在这里:http://download.csdn.net/detail/jiajia333666/9051255



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值