package中如何选择action

当struts配置文件中的一个package中有多个action都能匹配同一个请求的Url时,struts会选择其中的一个进行处理,具体怎样进行选择,请看如下实例:

struts配置如下:

<constant name="struts.enable.SlashesInActionNames" value="true" />
<package name="page" namespace="/page" extends="struts-default">
<default-action-ref name="test"/>

<action name="test" class="Test" method="test">
<result>/test.jsp</result>
</action>

<action name="*/test/**" method="test1" class="Test">
<result>/test1.jsp</result>
</action>

<action name="*/*/**" method="test2" class="Test">
<result>/test2.jsp</result>
</action>

<action name="a/test/b" method="test3" class="Test">
<result>/test3.jsp</result>
</action>
</package>

对以下请求url及action选择

          请求url     action匹配
1 http://localhost/site/page/a/tes/b     action name="*/*/**"

2 http://localhost/site/page/a/test/a    action name="*/test/**"

3 http://localhost/site/page/a/test/b    action name="a/test/b"

4 http://localhost/site/page/a/test     action name="test"

struts2选择package里的action过程如下:

1. 查找action name完全匹配的,找到则返回,否则进入2.

2. 按顺序(即在配置文件中的顺序)查找通配符匹配action name,找到则返回,否则进入3.

3. 选择 default action,如果没有配置default action,则返回null.


源码
com.opensymphony.xwork2.config.impl.DefaultConfiguration.java
...
ActionConfig findActionConfigInNamespace(String namespace, String name) {
ActionConfig config = null;
if (namespace == null) {
namespace = "";
}
Map<String, ActionConfig> actions = namespaceActionConfigs.get(namespace);
if (actions != null) {
config = actions.get(name);
// Check wildcards
if (config == null) {
config = namespaceActionConfigMatchers.get(namespace).match(name);
// fail over to default action
if (config == null) {
String defaultActionRef = namespaceConfigs.get(namespace);
if (defaultActionRef != null) {
config = actions.get(defaultActionRef);
}
}
}
}
return config;
}
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值