zoukankan      html  css  js  c++  java
  • struts2 动态调用方法和使用通配符定义

       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" />   
    

    使用通配符定义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,这会降低程序的效率。

  • 相关阅读:
    IBM 2013策略发布:大数据和分析、云计算、企业移动、社交商务、智慧商务、智慧城市
    BakAndImgCD 6.0 发布,数据备份和映像
    YaCy 1.4 发布,分布式Web搜索引擎
    Pig安装及本地模式测试,体验
    GCC 4.7.3 发布
    UPUPW Nginx版PHP高配引擎发布
    如何选择基于云的大数据方案
    PortalBasic v3.1.1 beta1 示例工程发布
    LLVM 编译器架构获得 ACM 软件系统奖
    123 Flash Chat Server 9.9 发布
  • 原文地址:https://www.cnblogs.com/lomomiao/p/4163844.html
Copyright © 2011-2022 走看看