`

Dynamic Method Invocation

阅读更多

我们在配置一个action的时候,为了避免下Action类的每个方法都映射成一个action 我们可以这样配置:

 

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="default" extends="struts-default">
        <action name="*User" method="{1}" class="vaannila.UserAction">
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>

 

以前我们是:

 

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="default" extends="struts-default">
        <action name="User" class="vaannila.UserAction">
            <result name="success">/success.jsp</result>
        </action>
        <action name="addUser" method="add" class="vaannila.UserAction">
            <result name="success">/success.jsp</result>
        </action>
        <action name="updateUser" method="update" class="vaannila.UserAction">
            <result name="success">/success.jsp</result>
        </action>
        <action name="deleteUser" method="delete" class="vaannila.UserAction">
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>

 

写了比较多的重复代码,现在struts2支持动态方法调用,以通配符的形式来查找对应的方法。

 

下面我们写java代码

 

package vaannila;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

	private String message;
	
	public String execute()
	{
		message = "Inside execute method";
		return SUCCESS;		
	}
	
	public String add()
	{
		message = "Inside add method";
		return SUCCESS;		
	}
	
	public String update()
	{
		message = "Inside update method";
		return SUCCESS;		
	}
	
	public String delete()
	{
		message = "Inside delete method";
		return SUCCESS;		
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

}

 

最后就是我们访问action的url怎么写呢?

 

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<s:form action="User" >
<s:submit />
<s:submit action="addUser" value="Add" />
<s:submit action="updateUser" value="Update" />
<s:submit action="deleteUser" value="Delete" />
</s:form>
</body>
</html>
 

addUser匹配在strut2中配置的*User,那么add将会被作为了方法的名字到UserAction查找叫add的方法。这样就实现了动态方法的关系映射。

分享到:
评论

相关推荐

    Struts2最新漏洞升级2.3.32版本

    1、升级所需要的jar(见附件): freemarker-2.3.22.jar ognl-3.0.19.jar ... &lt;constant name="struts.enable.DynamicMethodInvocation" value="true"/&gt; 这两行请不要加在外边。“加在这里”&lt;/struts&gt;

    struts+habernate+spring

    1. **开启DMI:** 需要在struts.xml配置文件中设置`struts.enable.DynamicMethodInvocation`为`true`。 ```xml &lt;constant name="struts.enable.DynamicMethodInvocation" value="true"/&gt; ``` 2. **Action类...

    Struts2 S2-033漏洞分析1

    在修复 S2-033 漏洞时,我们可以采取两种方法:一是关闭动态方法调用,在 struts.xml 中的 `”struts.enable.DynamicMethodInvocation” value=”true” /&gt;` 改为 `”struts.enable.DynamicMethodInvocation” value...

    struts2 action的三种访问方式

    &lt;constant name="struts.enable.DynamicMethodInvocation" value="true"/&gt; ``` 配置完成后,用户可以通过`/MyAction!methodName.action`来调用`MyAction`类的`methodName`方法。 每种Action访问方式都有其适用...

    Struts2 处理多个请求

    要启用动态方法调用,需要在Struts配置文件中设置`struts.enable.DynamicMethodInvocation`常量为`true`,默认情况下它是启用的。 **示例:** 在登录验证的Action类中,可以添加一个注册用户的`register`方法...

    java eclipse

    #### 1.1 `struts.enable.DynamicMethodInvocation` 此配置项用于控制Struts是否启用动态方法调用(Dynamic Method Invocation,简称DMI)。DMI允许Struts框架在执行Action时通过字符串形式指定要调用的方法,从而...

    Distributed Programming with Ice

    method invocation and dispatch. After reading this part, you will understand the advanced features of Ice and how to effectively use them to find the correct trade-off between performance and resource...

    Struts2的常量详解

    struts.enable.DynamicMethodInvocation 属性设置 Struts 2 是否支持动态方法调用,该属性的默认值是 true。如果需要关闭动态方法调用,可以将该属性设置为 false。 这些常量都是 Struts2 框架的核心组件,它们控制...

    Struts2_Introduction

    - 动态方法调用(Dynamic Method Invocation,DMI)是一个可选特性,通过设置`struts.enable.DynamicMethodInvocation`为`true`来启用,允许使用方法名作为URL的一部分。 3. **测试项目**: - 在浏览器中访问`...

    struts2.0配置

    - **Dynamic Method Invocation**:`struts.enable.DynamicMethodInvocation`属性控制动态方法调用功能,当设置为`false`时,可以避免一些安全风险,但可能会限制某些功能的实现。 #### 4. **IDE配置与开发环境** ...

    Struts课堂笔记.rar--struts2的struts.properties配置文件详解

    struts.enable.DynamicMethodInvocation Allows one to disable dynamic method invocation from the URL 允许动态方法调用 struts.freemarker.manager.classname The org.apache.struts2.views.freemarker....

    Struts2的常量配置

    - **struts.enable.DynamicMethodInvocation**:控制是否启用动态方法调用,这是一个安全敏感的配置项,因为它允许通过URL参数调用Action类的方法。 #### 实践建议 1. **编码一致性**:始终确保`struts.i18n....

    Eclipse WEB项目集成Struts2的过程及问题解决

    这个配置文件设置了默认的动态方法调用为禁用(`DynamicMethodInvocation`),开发模式开启(`devMode`),定义了一个名为“default”的包,一个默认的动作“index”指向/index.jsp页面,并且配置了全局错误处理页面...

    struts2教程下(chap8到最后)

    在后续章节中,你会深入到Struts2的动态方法调用(Dynamic Method Invocation,DMI)和固定方法调用(Fixed Method Invocation,FMI)的区别。DMI允许你根据用户请求动态选择Action的方法,而FMI则更倾向于每个Action...

    超强大、好用的Pascal语言解释器(RemObjects Pascal Script)

    Allows IDispatch dynamic method invocation through Variant Assignment of script functions to Delphi events Uses byte code as an intermediate format and allows storing and reloading compiled ...

    SSD8 choice 全部的选择题

    - **同时支持静态和动态方法调用(Support for both static and dynamic method invocation)**:CORBA支持这两种方法调用模式,DCOM也支持类似的特性。 #### 6. RPC/RMI包支持的内容 **题目描述:** 下列选项中,...

    Struts2配置文件[文].pdf

    - `&lt;constant&gt;`标签用于设置Struts2的全局常量,如上面示例中的`DynamicMethodInvocation`和`devMode`。 - `&lt;include&gt;`标签用于导入其他XML配置文件,以保持配置的模块化。 **配置Action** 在Struts2中,`package`...

    纯Struts2环境搭建

    在这个例子中,`struts.enable.DynamicMethodInvocation`设置为`false`意味着不启用动态方法调用,`struts.devMode`设置为`false`表示不在开发模式下运行,以提高性能。 6. **创建Action类**:在对应的包`...

Global site tag (gtag.js) - Google Analytics