1.概述
-
在之前的学习中,一个action我们都得去配置一次,那么如果有若干个action时,我们就得去配置若干个
<action></action>
节点,不易于维护。 -
一个Web应用可能有成百上千个action声明,可以利用Struts提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系。
2.格式
类似于下面这样的格式,但是在Action类中必须要有对应的方法才能匹配
使用*
之后可以使用{1},{2}来代替第一个*
,第二个*
,以此类推。
<action name="UserAction-*" class="struts.ss.UserAction" method="{1}">
<result name="{1}-success">/success.jsp</result>
</action>
3.通配符映射的规则
- 若找到多个匹配,没有通配符的那个将胜出
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 配置Struts可以受理的请求的扩展名 -->
<constant name="struts.action.extension" value="action,,do"></constant>
<package name="default" extends="struts-default" strict-method-invocation="false">
<!-- 假如匹配的是UserAction-save ,则会优先匹配第二个而不是第一个-->
<action name="UserAction-*" class="struts.ss.UserAction" method="{1}">
<result name="{1}-success">/success.jsp</result>
</action>
<action name="UserAction-save" class="struts.ss.UserAction" method="test">
<result name="query-succerr">/success.jsp</result>
</action>
</package>
-
若指定的动作不存在,Struts将会尝试把这个URI与任何一个包含着通配符
*
的动作名进行匹配 -
被通配符匹配到的URI字符串的子串可以用{1},{2}来引用
{1}匹配第一个子串,{2}匹配第二个子串等等
{0}匹配整个URI
-
若Struts找到的带有通配符的匹配不止一个,则按先后顺序进行匹配
-
可以匹配零个或多个字符,但不包括/字符,如果想把/字符包括在内,需要使用
**
,如果需要对某个字符进行转义,需要使用\
。
3.关于Struts2.5以上版本的说明
-
在看视频学习的时候其教学视频用的是2.3版本的,因此在包前面不用修改其它配置,
<package name="default" extends="struts-default" >...</package>
就好 -
但是我自己使用的是Struts2.5,没修改包的属性后直接配置action后,会报错,在包属性添加
strict-method-invocation="false"
就好了。
即:<package name="default" extends="struts-default" strict-method-invocation="false">....</package>
网友评论