`

Struts2学习笔记---DMI(动态方法调用)

阅读更多


用action的我们可以使用method来调用一个方法,不过还可以用DMI,动态方法调用

Action执行的时候并不一定要执行execute方法
可以在配置文件中配置Action的时候用method=来指定执行哪个方法
也可以在url地址中动态指定(动态方法调用DMI)(推荐)
前者会产生太多的action,所以不推荐使用

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <!-- Add packages here -->
	<constant name="struts.devMode" value="true" />
    <package name="user" extends="struts-default" namespace="/user">
        <action name="userAdd" class="org.hualang.actionmethod.ActionMethod" method="add">
            <result>/MyJsp.jsp</result>
        </action>
        
        <action name="user" class="org.hualang.actionmethod.ActionMethod">
        	<result>/MyJsp.jsp</result>
        </action>
    </package>
</struts>

 

这里有两个action,第一个action用的就是method方式,但是不推荐用,而第二个就是用的DMI动态方法调用

 

ActionMethod.java(在src目录下的org.hualang.actionmethod包中)

这里没有execute()方法,而是add方法

第一个method="add",说明调用add()方法,只要返回值是String,想调用什么就调用什么
action的名字是userAdd,而对应的result是MyJsp.jsp,所以到这个页面,显示“添加页面”

package org.hualang.actionmethod;

import com.opensymphony.xwork2.ActionSupport;

public class ActionMethod extends ActionSupport {
	public String add()
	{
		return SUCCESS;
	}
}

 
index.jsp(另外还有个MyJsp.jsp就是显示字符串“添加页面”)

<body>
Action执行的时候并不一定要执行execute方法<br />
可以在配置文件中配置Action的时候用method=来指定执行哪个方法<br/>
也可以在url地址中动态指定(动态方法调用DMI)(推荐)<br />
	<a href="<%=context %>/user/userAdd">添加用户</a>
	<br />
	<a href="<%=context %>/user/user!add">添加用户</a>
	<br />
前者会产生太多的action,所以不推荐使用
	
</body>

 

其他的跟以前的基本一样

 

运行结果如下:


点击第一个链接
 

 点击第二个链接

 



 

  • 大小: 12.6 KB
  • 大小: 10 KB
  • 大小: 10 KB
分享到:
评论
12 楼 jianson_wu 2011-05-16  
我看了马士兵的视频,个人感觉使用通配符的方式来做页面提交更强大。。。。  并且在企业中都是约定优于配置的。。。。。。   
11 楼 serbry0033 2011-05-14  
动态调用只是一种新的写法 至于用不用还是整个项目的设计规范 安全问题谈不上
10 楼 java_vm 2011-05-13  
wuliaolll 写道
你说的action大多是什么情况,配置文件的action配置吗?写action代码并没有减少。

如果是这样,产生多个action未尝不可,项目大了,全用aaa!method的方式,不好维护,难以形成规范性,以method配置方式一目了然,而且你在请求路径上加上方法名,无疑是把代码级别的东西暴露了,不太适合。

是不是这个跟通配符差不多了,项目中是不是通配符也尽量不要用???
9 楼 悲剧了 2011-05-12  
用struts2插件吧 零配置
8 楼 waitingmyself 2011-05-10  
KimShen 写道
使用不当会造成严重安全问题,强烈建议关闭掉

同意  性能问题 安全问题
7 楼 KimShen 2011-05-10  
使用不当会造成严重安全问题,强烈建议关闭掉
6 楼 limaofeng 2011-05-10  
这个写法只是减少了 action 的配置代码    并不能减少 action 的数量,  因为每次请求都会new action    如果这样写的话。 匹配方法的时候可能还会更加消耗性能。 因为每次都会通过反射去寻找方法,而且还不知道方法是否存在。
5 楼 簡單從泚銷夨 2011-05-10  
使用 org.apache.struts2.convention.annotation 比较方便
4 楼 wuliaolll 2011-05-10  
你说的action大多是什么情况,配置文件的action配置吗?写action代码并没有减少。

如果是这样,产生多个action未尝不可,项目大了,全用aaa!method的方式,不好维护,难以形成规范性,以method配置方式一目了然,而且你在请求路径上加上方法名,无疑是把代码级别的东西暴露了,不太适合。
3 楼 take 2011-05-09  
bluemare 写道
那对于多个页面result如果配置呢?

判断嘛..
2 楼 bluemare 2011-05-09  
那对于多个页面result如果配置呢?
1 楼 java_user 2011-05-05  
Dynamic Method Invoke的缩写?

相关推荐

    Struts2学习笔记(3)-DMI动态调用方式

    Struts2是一个流行的Java web框架,它提供了许多强大的特性,其中一种是动态方法调用(Dynamic Method Invocation,简称DMI)。DMI允许我们在不修改配置文件的情况下,通过URL动态地调用Action类的不同方法,增强了...

    struts2学习笔记

    2. **动态方法调用(DMI, Dynamic Method Invocation)**: 动态方法调用允许我们不直接以Action名称作为表单的`action`属性,而是以`actionName!methodName.action`的形式指定,这样可以根据不同的`methodName`调用...

    struts2的学习笔记+测试源代码

    Struts2支持动态方法调用,允许直接根据请求参数调用Action中的方法,提高了灵活性。 六、插件系统 Struts2拥有丰富的插件库,如Tiles插件用于页面布局,Struts2-dojo-plugin提供AJAX支持,Struts2-convention-...

    struts2学习笔记二(第2讲.Struts2入门与配置续)

    5. **动态方法调用(Dynamic Method Invocation,DMI)**:Struts2允许通过URL直接调用Action类的方法,增强了灵活性。 6. **OGNL(Object-Graph Navigation Language)**:Struts2内部广泛使用OGNL作为表达式语言,...

    Struts2.1学习笔记

    - **动态方法调用**:Struts2支持动态方法调用(Dynamic Method Invocation,DMI),即可以通过URL参数来指定Action中要执行的具体方法。例如,通过URL`http://localhost:8080/app/user/user!add`来调用`userAction`...

    struts2学习资料,笔记

    Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级的Web应用。它是基于MVC(Model-View-Controller)设计...Struts2 学习笔记.doc应该包含了关于这些知识点的详细讲解和示例,是学习Struts2的良好参考资料。

    struts2学习笔记十八(第18讲.Struts2深入探索)

    3. **动态方法调用(Dynamic Method Invocation,DMI)**: DMI允许直接通过URL访问Action的方法,而不是仅仅依赖于Action类的默认execute方法。这增加了灵活性,使得不同的URL可以直接映射到Action的不同业务方法。...

    马士兵struts2课程的学习笔记

    - **动态方法调用 (DMI)**:当`struts.enable.DynamicMethodInvocation`设为`true`时,可以通过`actionname!methodname`的形式调用Action的不同方法。 10. **通配符**:Struts2支持通配符配置,如`*`作为一般...

    Struts2 笔记代码

    4. **动态方法调用(Dynamic Method Invocation,DMI)**:Struts2允许直接根据URL调用Action的方法,无需预先在配置文件中声明,增强了灵活性。 5. **插件架构**:Struts2拥有丰富的插件支持,如Spring插件、Tiles...

    struts学习笔记

    动态方法调用(Dynamic Method Invocation, DMI)**: - 允许通过请求参数动态地决定调用哪个方法。 - 例如:`/actionName!methodName.action`会调用`actionName`实例中的`methodName`方法。 **3. 标签、自定义...

    struct2学习总结 struct2学习笔记

    - `execute`方法默认被调用,但也可以通过配置或DMI(动态方法调用)调用其他方法。推荐使用配置通配符来指定多个方法,因为DMI在性能上不如配置直接。 5. **路径问题**: - Struts2中的路径基于Action配置,而非...

    Struts2笔记+Hibernate3.6笔记+Spring3笔记

    6. **动态方法调用(Dynamic Method Invocation,DMI)**: 允许直接通过URL调用Action的方法。 **Hibernate3.6笔记** Hibernate是一个对象关系映射(ORM)框架,简化了数据库操作。以下是其主要特点和知识点: 1. ...

    struts2.0(希望可以帮助大家)

    7. **动态方法调用(Dynamic Method Invocation,DMI)**:讲解如何通过Action方法名动态调用,使得Action方法名可以来源于请求参数。 8. **Struts2整合Spring**:说明如何将Struts2与Spring框架结合,实现依赖注入...

    struts学习总结

    7. **动态方法调用(DMI)**:通过`method`属性或URL动态指定要执行的方法。在配置文件中,可以使用通配符`&lt;action&gt;`标签来实现动态映射。 8. **命名空间(namespace)**:namespace决定了Action的访问路径。默认是...

Global site tag (gtag.js) - Google Analytics