`

Struts2_动态方法调用

 
阅读更多

via: http://blog.csdn.net/longwentao/article/details/6940289

 

当我们访问一个Action时,默认是访问execute()方法,但当在一个Action中存存多个方法时,这时我们应该怎么定位到想要访问的方法呢?这时就需要用到动态方法调用DMI(Dynamic Method Invocation)。这里简单介绍两种动态调用的方法:

 

一、method属性

在struts.xml文件中,我们可以指定method属性,来定位我们要访问的方法,如下代码:

<action name="dmi-register" class="dmi.LoginRegisterAction" method="register"></action>

 

下面通过一个登录注册的demo来演示一下具体的操作过程:

一)、LoginRegisterAction 源文件部分代码如下:

private String userName;  

private String password;  

  

//默认执行登录功能  

public String execute() {  

    if ("admin".equals(userName) && "123".equals(password)) {  

        ActionContext context = ActionContext.getContext();  

        context.getSession().put("tip", "恭喜你" + userName + "你已经登成功");  

        return SUCCESS;  

    } else {  

        return ERROR;  

    }  

}  

  

public String register() {  

    ActionContext context = ActionContext.getContext();  

    context.getSession().put("tip", "恭喜你" + userName + "你已经注册成功");  

    return SUCCESS;  

 

二)、struts.xml 文件部分配置如下:

<!-- 动态方法调用 method属性-->  

<action name="dmi-login" class="dmi.LoginRegisterAction">  

    <result name="input">/dmi/login.jsp</result>  

    <result name="error">/dmi/error.jsp</result>  

    <result name="success">/dmi/welcome.jsp</result>  

</action>  

<action name="dmi-register" class="dmi.LoginRegisterAction" method="register" >  

    <result name="input">/dmi/login.jsp</result>  

    <result name="error">/dmi/error.jsp</result>  

    <result name="success">/dmi/welcome.jsp</result>  

</action> 

 

三)、loginRegister.jsp文件代码如下:

<html>  

    <head>  

        <title>struts2之动态方法调用</title>  

        <script type="text/javascript" src="../jquery-1.4.3.js"></script>  

        <script type="text/javascript">  

            $(function(){                 

                $("#register2").click(function(){  

                    var node=$("#myForm2");  

                    node.attr("action","dmi-register.action");  

                });  

            })  

        </script>  

    </head>  

    <body> 

<h4>动态方法调用之method属性</h4>  

        <form id="myForm2" action="dmi-login.action">  

            用户名:<input type="text" name="userName" />  

            密 码:<input type="password" name="password" />  

            <input type="submit" value="登录"  />  

            <input type="submit" id="register2" value="注册"  />  

        </form>  

    </body>  

</html> 

 

在一个form表单中,有登录、注册两个动作,分别对应Action中的不同方法,登录 默认对应execute()方法,注册对应register()方法,这样,通过method属性实现动态方法调用的操作就完了,但是struts.xml文件中的配置存存冗余问题,这时我们可以通过通配符来解决这个问题。

 

二、通配符

一)、为了更好的说明问题,我们在LoginRegisterAction 源文件中增加以下两个方法,方法实现功能与上面的完成一样,主要用于体现 登录 不在调用默认的 execute() 方法,而是对应于Action中的 dmiLogin() 方法,注册 对应Action中的 dmiRegister() 方法:

public String dmiRegister() {  

    ActionContext context = ActionContext.getContext();  

    context.getSession().put("tip", "恭喜你" + userName + "你已经注册成功");  

    return SUCCESS;  

}  

      

public String dmiLogin(){  

    if ("admin".equals(userName) && "123".equals(password)) {  

        ActionContext context = ActionContext.getContext();  

        context.getSession().put("tip", "恭喜你" + userName + "你已经登成功");  

        return SUCCESS;  

    } else {  

        return ERROR;  

    }  

}

 

二)、struts.xml 文件部分配置如下:

<!-- 动态方法调用 通配符-->  

<action name="*Action" class="dmi.LoginRegisterAction" method="{1}" >  

    <result name="input">/dmi/login.jsp</result>  

    <result name="error">/dmi/error.jsp</result>  

    <result name="success">/dmi/welcome.jsp</result>  

</action>

上面的<action name="*Action" >不是一个普通的Action,而是一个定义了一系列的逻辑Action,只要用户请求的URL是*Action模式的,都可能用该Action来处理;method属性值不再是Action中的哪一个方法,而是一个表达式,该表达式的值是name属性中的第一个*的值。例如用户请求的URL是:dmiLoginAction.action,则调用LoginRegisterAction中的dmiLogin方法。

三)、loginRegister.jsp文件增加如下代码:

$("#register").click(function(){  

    var node=$("#myForm");  

    node.attr("action","dmiRegisterAction.action");  

});

<h4>动态方法调用之通配符</h4>  

<form id="myForm" action="dmiLoginAction.action">  

    用户名:<input type="text" name="userName" />  

    密 码:<input type="password" name="password" />  

    <input type="submit" value="登录"  />  

    <input type="submit" id="register" value="注册"  />  

</form>

在访问时 动态方法调用 URL为: http://localhost:8080/projectname/package/actionname!methodname.do

 

注意: 要使用动态方法调用,必须社会自允许struts2允许动态方法调用,通过设置struts.enable.DynamicMethodInvocation常量来完成,该常量属性的默认值是true

分享到:
评论

相关推荐

    Struts2 动态方法调用(十三)

    在Struts2中,动态方法调用(Dynamic Method Invocation,DMI)是一种特性,允许我们通过URL直接调用Action类的方法,而无需在配置文件中显式指定。这在某些情况下提供了更大的灵活性。 在Struts2的动态方法调用中...

    Struts2动态方法调用

    Struts2作为一款流行的Java Web框架,其动态方法调用(Dynamic Method Invocation,DMI)功能为开发者提供了极大的灵活性。在传统的MVC模式中,控制器(Controller)通常通过硬编码的方式处理请求,而动态方法调用则...

    Struts2_0400_Path.rar_struts2_0400_Path

    "Struts2_0400_Path"这个标题和描述暗示了这是一个关于Struts2框架中路径配置的学习资料,可能是针对Struts2的一个特定漏洞或版本更新进行的讲解。在Struts2框架中,路径配置是非常关键的部分,它涉及到请求的映射、...

    Struts2_Dwr.rar_Struts2_Dwr_dwr_struts2 dwr

    在本项目"Struts2_Dwr"中,我们将看到如何整合这两个工具来实现一个登录验证系统。 Struts2是一个基于MVC设计模式的Java Web应用框架,它提供了强大的控制层结构,用于处理用户请求、业务逻辑和视图展示。Struts2的...

    Struts2_CRUD.rar_Struts2_CRUD_Struts2的增改删查 操作 示例_struts2_struts2

    综上所述,"Struts2_CRUD"示例涵盖了使用Struts2框架进行基本数据操作的核心概念和实践。通过学习这个示例,初学者可以理解如何在Struts2中组织Action、Form、Interceptor、配置文件和视图,以及如何实现CRUD操作和...

    Struts2_API.rar_API_struts2_struts2 api_struts2 api chm_struts2文

    10. **动态方法调用(Dynamic Method Invocation,DMI)**:允许通过URL直接调用Action的方法,增强了路由的灵活性。 总的来说,Struts2 API文档是学习和掌握Struts2框架不可或缺的资源,无论你是初学者还是经验丰富...

    struts2_api.rar_STRUTS2-API_structs2 api_struts2 api_struts2 res

    这个压缩包文件“struts2_api.rar”包含了关于Struts2框架的API文档,是开发者理解和使用Struts2框架的重要参考资料。以下是这个API文档中涵盖的关键知识点: 1. **Action接口与ActionSupport类**:在Struts2中,...

    struts2_jar

    总之,Struts2_Jar是Java Web开发中的重要工具,理解其工作原理和使用方法,能有效提升开发效率,构建健壮的应用程序。对初学者来说,熟练掌握Struts2框架不仅能打开一扇通往专业开发的大门,也将为未来的职业发展...

    struts2中动态方法的调用

    在Struts2框架中,动态方法调用是一个非常实用且灵活的功能,它允许开发者通过URL中的参数来决定控制器中具体调用哪个方法。这不仅提高了代码的可读性和可维护性,还使得处理不同的请求变得更加直观和高效。下面将...

    Struts2_CRUD.rar_struts2学生_struts2系统_struts2选课_struts学生_简单选课

    这个"Struts2_CRUD.rar"压缩包包含了一个基于Struts2的学生选课系统的源代码,可以帮助我们深入理解如何使用Struts2进行CRUD(创建、读取、更新和删除)操作。 首先,让我们来探讨一下Struts2框架的基础。Struts2是...

    struts 2 action 动态调用

    ### Struts 2 Action 动态方法调用详解 #### 一、引言 在Struts 2框架中,Action动态方法调用是一项非常实用的功能。它允许开发者在一个Action类中定义多个处理方法,而不仅仅局限于传统的`execute()`方法。这种...

    first_demo.rar_DEMO_struts2_struts2 hibernate_简历

    标题中的"first_demo.rar_DEMO_struts2_struts2_hibernate_简历"表明这是一个关于使用Struts2和Hibernate框架开发的初级示例项目,主要功能是实现简历的创建、查看、编辑和删除操作。这个DEMO是针对初学者或者开发者...

    struts2 动态方法调用(DMI)

    Struts2 动态方法调用(DMI,Dynamic Method Invocation)是Struts2框架中一个特色功能,允许开发者通过URL直接调用Action类中的方法,而无需预先在配置文件中显式声明这些方法。这种机制增加了开发的灵活性,但也...

    Struts2_Spring_Example.zip_spring struts2_struts2-examp

    在 "Struts2_Spring_Example" 这个项目中,我们可以期待看到以下几个关键组件和配置: 1. **struts.xml**:这是 Struts2 的配置文件,定义了动作类、结果视图、拦截器等。在这个例子中,会看到如何配置 Struts2 ...

    Struts1-1API.rar_Struts1_API_struts 1 api_struts1_struts1 api_st

    Struts1 API是开发者在使用Struts1框架进行开发时的重要参考文档,提供了框架的核心组件、类库以及方法的详细说明。 在描述中提到的"使用Struts的中文API",这对于不熟悉英文文档的开发者来说是一个宝贵的资源,它...

    SSH.rar_s2sh_ssh struts2_ssh+mysql_struts2 hibernate_struts2 mys

    这个名为"SSH.rar_s2sh_ssh+mysql_struts2_hibernate_struts2_mys"的压缩包文件,可能是关于如何整合这些技术并配合MySQL数据库进行项目开发的文档资料。 首先,我们来看Struts2,这是一个基于MVC设计模式的Java ...

    struts2_ppt

    总的来说,"struts2_ppt"可能包含的内容广泛,从基础概念、核心组件的解释、配置方法、源码解析,到工具使用、安全实践以及与其他框架的整合。对于想要学习或深入了解Struts2的开发者来说,这份资料将是宝贵的资源。

    struts2_vip会员管理系统

    Struts2提供了丰富的特性,包括拦截器(Interceptor)、动态方法调用(Dynamic Method Invocation)、自定义标记库(Custom Tags)等,使得开发者能够更灵活地控制请求处理流程,同时降低了视图层和业务逻辑层的耦合...

    Struts2_interceptor_和_filter区别

    标题和描述均聚焦于“Struts2_interceptor_和_filter区别”,这暗示着对比和解析Struts2框架中拦截器(Interceptor)与过滤器(Filter)的差异是本文的核心议题。接下来,我们将深入探讨这两者在功能、实现方式以及...

Global site tag (gtag.js) - Google Analytics