职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 585|回复: 9

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

[复制链接]
走失的猫咪 发表于 2011-8-23 09:46 | 显示全部楼层 |阅读模式
用action的我们......
DynamicMet......
那对于多个页面res......
bluemare写道......
你说的action大......
使用org.apac......
这个写法只是减少了a......
使用不当会造成严重安......
KimShen写道 ......
用struts2插件......



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

Xml代码  
<?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>  

<?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,所以到这个页面,显示“添加页面”
Java代码  
package org.hualang.actionmethod;   
  
import com.opensymphony.xwork2.ActionSupport;   
  
public class ActionMethod extends ActionSupport {   
    public String add()   
    {   
        return SUCCESS;   
    }   
}  

package org.hualang.actionmethod;

import com.opensymphony.xwork2.ActionSupport;

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

index.jsp(另外还有个MyJsp.jsp就是显示字符串“添加页面”)
Html代码  
<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>  

<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
查看图片附件

月上萧萧 发表于 2011-8-23 09:46 | 显示全部楼层
Dynamic Method Invoke的缩写?

找不到我 发表于 2011-8-23 09:46 | 显示全部楼层
那对于多个页面result如果配置呢?

shmilyyu 发表于 2011-8-23 09:46 | 显示全部楼层
bluemare 写道
那对于多个页面result如果配置呢?

判断嘛..

找不到我 发表于 2011-8-23 09:47 | 显示全部楼层
你说的action大多是什么情况,配置文件的action配置吗?写action代码并没有减少。

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


紫衿 发表于 2011-8-23 09:47 | 显示全部楼层
使用 org.apache.struts2.convention.annotation 比较方便

叫我小乖 发表于 2011-8-23 09:47 | 显示全部楼层
这个写法只是减少了 action 的配置代码    并不能减少 action 的数量,  因为每次请求都会new action    如果这样写的话。 匹配方法的时候可能还会更加消耗性能。 因为每次都会通过反射去寻找方法,而且还不知道方法是否存在。


只学java 发表于 2011-8-23 09:47 | 显示全部楼层
使用不当会造成严重安全问题,强烈建议关闭掉

fl 发表于 2011-8-23 09:47 | 显示全部楼层
KimShen 写道
使用不当会造成严重安全问题,强烈建议关闭掉

同意  性能问题 安全问题

江南枫 发表于 2011-8-23 09:47 | 显示全部楼层
用struts2插件吧 零配置
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-9 10:31 , Processed in 0.132625 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表