转自:http://keveon.iteye.com/blog/998159
struts2中的动态方法调用(Dynamic method Invoc)
struts2中无需配置就可以直接调用Action中非execute方法的方式,就是用struts2的动态方法调用。动态方法调用是在action的名字中使用感叹号(!)来标示要调用的方法名,其语法格式为actionName!methodname.action,例如我们的struts.xml的配置如下:
- <struts>
- <package name="struts" namespace="/user" extends="struts-default">
- <action name="user" class="com.struts.action.UserAction">
- <result name="success">/WEB-INF/page/message.jsp</result>
- </action>
- </package>
- </struts>
action中的有如下方法:
- public String addUser() {
- this.message = "addUser";
- return "success";
- }
- public String deleteUser() {
- this.message = "deleteUser";
- return "success";
- }
当请求/user!addUser.action时,将调用UserAction的addUser()方法,当请求/user!deleteUser.action时,将调用UserAction的deleteUser()方法。
如果要禁用动态方法调用,则可以在struts.xml配置如下常量
- <constant name="struts.enable.DynamicMethodInvocation" value="false" />
value的默认值为true。
使用通配符定义action
使用通配符..其中的好处就是可以大大减少了配置文件的内容,下面举个例子:
struts.xml中的配置如下:
- <struts>
- <package name="struts" namespace="/user" extends="struts-default">
- <action name="user_*" class="com.struts.action.UserAction" method="{1}">
- <result name="success">/WEB-INF/page/message.jsp</result>
- </action>
- </package>
- </struts>
user_*中的*就是通配符,表示的是可以匹配任意字符,method="{1}"中的{1}就表示的就是*的内容,当然也可以用多个*,比如"*_*", "*_*_*",不过建议不要使用太多的*,这样会降低代码的可读性
action中的方法:
- public String addUser() {
- this.message = "addUser";
- return "success";
- }
- public String deleteUser() {
- this.message = "deleteUser";
- return "success";
- }
当请求/user_addUser.action时,将调用UserAction的addUser()方法,当请求/user_deleteUser.action时,将调用UserAction的deleteUser()方法。
关于通配符匹配的优先权:
(1)如果struts.xml里面有对应的action name ,就算它有其他通配符匹配的,都优先对应完全相同的。
比如 有一个 action name 是 "user_add" 还有一个是 "user_*"。现在,有一个请求是 "user_add.action ",那么,它会优先匹配"user_add " 。
(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面,它匹配写在前面的
比如 有一个 action name 是 "*_*" 还有一个是 "user_*" ,现在,有一个请求是 "user_add.action ",.那么它会优先匹配写在前面的那个action
(3)任何带"*"的action name 优先权都是一样的,不是说带一个"*"的优先权就比带两个"*" 的高。
总结:因此我们应该把具有含有最多通配符的Acton配置放在最后,否则Struts2一一匹配所有的Action,这会降低程序的效率。
相关推荐
在Struts2中,JavaScript可以用来发起Ajax请求,动态调用后台Action的方法。例如,我们可以使用jQuery的`$.ajax`或`$.post`方法,配合Struts2的ActionContext,将请求参数传递给服务器。在服务器端,Struts2会解析...
本文将深入探讨Struts2中的动态调用之通配符特性。 首先,我们要理解在Struts2中,动态调用的基本概念。它允许我们不在配置文件中为每个Action的每一个method单独指定一个URL,而是通过某种约定或规则来映射多个...
在Struts2中,Action是业务逻辑处理的核心,而通配符的使用则是Struts2框架中一种灵活的配置方式,允许我们以更简洁的方式调用同一个Action中的不同方法。下面我们将深入探讨如何利用Struts2的通配符来实现这一功能...
在 Struts2 中,我们可以使用不同的方式来动态调用 Action 的指定方法,例如使用表单提交、struts.xml 配置、通配符方法等方式。此外,我们还可以配置默认的 Action 和全局结果,以便更好地管理我们的应用程序。
通过上述分析可以看出,Struts2提供了丰富的特性来支持Web应用程序的开发,尤其是通过Namespace和ActionMethod等机制来组织和管理Action,以及利用通配符配置来简化配置文件,大大提高了开发效率和维护性。
本文将深入探讨Struts2.1中的动态方法调用和使用通配符定义这两个关键知识点。 首先,让我们理解动态方法调用的概念。在传统的Struts2框架中,Action类的方法与HTTP请求的URL路径直接关联。然而,动态方法调用允许...
在Struts2的配置中,通配符(Wildcard)的使用是一个非常实用的功能,它使得URL映射更加灵活,减少了重复配置。下面将详细解释Struts2通配符的用法,并结合示例代码进行解析。 1. **Struts2通配符概述** Struts2的...
本文主要介绍Struts2中的通配符配置,这是一种非常实用且灵活的方式来处理复杂的URL映射。 #### 二、Struts2中的Action配置 在Struts2中,`Action`是框架的核心组件之一,用于处理用户的请求。`Action`接口定义了...
在Struts2中,通配符配置是一项强大的功能,它允许开发者以更灵活的方式定义Action映射,从而提高代码的复用性和配置的简洁性。这篇博客可能详细解释了如何在Struts2框架中使用通配符配置来简化Action配置。 通配符...
动态方法调用是Struts中的一种机制,它允许在不预先定义每个具体方法的情况下,通过Action类的方法名来执行不同的业务逻辑。通常有三种方式实现DMI: 1. 改变表单中`action`属性,使不同的提交按钮对应不同的方法。...
在Struts2的配置文件(通常为struts.xml或struts.properties)中,我们定义Action的映射规则,包括请求路径、方法调用以及结果视图等。默认情况下,一个Action类对应一个请求URL,但通过特定配置,可以让一个Action...
Struts2 框架提供了动态方法调用的机制,允许一个 Action 对应多个请求,从而减少 Action 的数量。这种机制可以提高系统的灵活性和可维护性。 方法一:指定 Method 属性 在 Struts2 中,我们可以通过指定 Method ...
动态方法则是Struts2.5框架中的一种动态调用方法的方式,它允许开发者使用动态调用方法来实现灵活的方法调用。 一、通配符 通配符是Struts2.5框架中的一种强大的功能,它允许开发者使用通配符来指定方法。例如,在...
通过以上分析可以看出,Struts2中的通配符映射提供了强大的路由机制,使得开发者能够更轻松地管理和扩展应用程序。同时,多个请求处理方法的设计模式也极大地提高了代码的可读性和可维护性。掌握这些技巧将有助于...
通过以上示例可以看出,在Struts2框架中使用通配符可以显著减少配置文件的工作量,使得配置更为简洁。但同时也要注意到,为了能够有效利用通配符,需要事先制定一套明确的命名规则。此外,虽然通配符可以简化配置,...
Struts2支持Action的动态方法调用,允许Action类根据请求参数动态选择要执行的方法,而无需预先在struts.xml中硬编码。 **八、Action通配符(wildcard)的配置** 通配符配置允许为一组相似的Action定义一个通用配置,...
在Struts2中,Action是处理用户请求的核心组件。它负责业务逻辑的执行,并将结果返回给视图进行展示。本篇文章将详细介绍Struts2 Action的三种访问方式:传统方式、通配符方式和动态方式。 1. **传统方式(Static ...
总结来说,Struts2通过动态方法调用、通配符映射和拦截器+`@Action`注解等方式,提供了灵活的多请求处理能力,使Action类能够更好地组织和管理不同的业务逻辑。开发者可以根据项目需求和代码可维护性选择适合的方法...
在Struts2中,Action类需要实现`com.opensymphony.xwork2.Action`接口,或者更常见的是继承`com.opensymphony.xwork2.ActionSupport`,这个基类已经提供了execute()方法的默认实现,方便开发者使用。 Action的配置...
在Struts2框架中,这种动态访问主要体现在Action类的实例化和方法调用上,极大地提高了应用的可扩展性和可维护性。下面将详细介绍Struts2动态访问方式的相关知识点。 首先,Struts2的核心是DispatcherServlet,它...