当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;
}
...
分享到:
相关推荐
Action-RPG+Starter+Kit+5.2.unitypackage,unity 类似框架类别的,导入引擎查看demo源码
Action-RPG Starter Kit 6.55 商店几百买的最新
Runner Action Animation Pack.unitypackage
Fantasy Action RPG Tileset v1.2.unitypackage
Struts2 中 Action 接收参数的方法 Struts2 框架中,Action 组件可以通过多种方式接收参数,这些方式包括使用 Action 的属性、使用 ...Struts2 中 Action 接收参数的方法有多种,可以根据实际情况选择合适的方法。
在 Struts2 中,还可以配置默认的 Action,例如:<package ...><default-action-ref name="myDefaultAction"/></package>这时,我们可以在 struts.xml 文件中定义一个默认的 Action,例如:<action name=...
当你在Action中抛出异常或者使用validate方法进行数据验证时,可以通过addActionError方法添加错误信息。例如: ```java public class MyAction extends ActionSupport { public String execute() throws ...
Struts2框架中的Action是核心组件之一,它负责接收HTTP请求并进行业务逻辑处理,然后将控制转向相应的视图进行展示。在Struts2中,Action的...在实际应用中,应根据项目需求合理选择和配置Action,同时注意安全问题。
在Struts2框架中,自定义Action是实现业务逻辑的核心组件。这个教程将带你了解如何通过实现`Action`接口来创建一个简单的登录功能。首先,我们需要理解Struts2的架构和Action类的角色。 Struts2是一个基于MVC...
本文将深入探讨Action名称的搜索顺序、Action配置的默认值以及Action中Result的不同结果类型。 #### Action名称的搜索顺序 在Struts2中,Action的搜索顺序是由其配置文件(通常是struts.xml)决定的。当用户请求被...
android.intent.action.PACKAGE_REMOVED和android.intent.action.PACKAGE_ADDED 可以监听别的应用被安装卸载,但不能监听自己被卸载啊。 监听自己被卸载通过前辈们探索发现,只能通过监听系统卸载log如:act=...
本主题将深入探讨在Android Studio中如何使用BroadcastReceiver,特别是关注`setComponent()`和`setPackage()`方法在设置广播接收器优先级方面的作用。 首先,BroadcastReceiver有两种注册方式:静态注册和动态注册...
在 Struts2 中使用 `redirect-action` 来实现 Action 之间的跳转是一种常见的做法,特别是在需要按顺序执行多个 Action 的业务场景中。通过这种方式,不仅可以保持应用程序的良好结构,还能有效地组织业务流程。同时...
在《Action-RPG Starter Kit 6.5》的unitypackage中,包含了构建一个完整Action-RPG所需的各种组件和模块。这些组件可能包括: 1. **角色控制器**:这是游戏的核心部分,提供角色移动、跳跃、攻击等基本功能。通常...
Struts2和Struts1是两个非常著名的Java Web框架,它们在处理请求时通常会在URL中显式地显示.action或.do后缀。然而,为了提供更友好的用户体验和增强安全性,有时我们需要隐藏这些扩展名。本篇文章将详细介绍如何在...
在实际开发中,由于Android系统的安全机制,自定义的广播接收器可能不会在应用卸载后立即接收到`ACTION_PACKAGE_REMOVED`广播。为了解决这个问题,我们可以利用AIDL(Android Interface Definition Language)创建一...
当有多个应用可以处理相同的Action时,可以使用`createChooser(Intent target, CharSequence title)`创建一个Intent选择器,让用户选择合适的处理应用。 总之,Intent的Action属性是Android中非常关键的一个概念,...
### S2SH+JQuery的Checkbox批量选择并在Action中获取数据 #### 一、背景介绍 在Web开发中,批量操作是一种常见的需求场景,尤其是在管理后台系统中,用户经常需要对多条记录进行批量处理,比如批量删除、批量启用...
在Unity中,Playmaker以一个Unitypackage的形式提供,方便用户导入到项目中使用。"Playmaker.unitypackage"文件包含了所有必要的资源、脚本和设置,确保在导入后即可在项目中立即启用Playmaker功能。只需将此Unity...
通过`verifyActionErrors`验证了Action中是否出现了密码不匹配的错误,并且确保没有设置`authentication`属性。 ### 总结 通过上述代码分析可以看出,Struts2框架中的Action是非常重要的组成部分,它负责处理用户...