`

Struts2理解--动态方法和method属性及通配符_默认Action

 
阅读更多

众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Action中的任意方法。

   想要禁止调用动态方法,则要在struts.xml中通过constant元素将属性strutsenableDynamicMethodInvocation设置为false,来禁止调用动态方法。
            <constant name="strutsenableDynamicMethodInvocation" value="false"/>
 
method属性:
这时我们需要通过其他安全的方式来实现动态方法的调用
一、通过action元素的method属性来指定Action执行时调用的方法
    <action name="empAction_register" class="com.syaccp.erp.action.emp.EmpAction" method="register">
            <result name="success">/WEB-INF/jsp/basic/emp_list.jsp</result>
            <result name="input_edit">/WEB-INF/jsp/basic/emp_edit.jsp</result>
            <result name="input_add">/WEB-INF/jsp/basic/emp_add.jsp</result>
            <result name="reload" type="redirect">empAction.action</result>

   </action>

以上一个配置片段便用到了method属性,当请求/empAction_register.action时,Struts2框架会在EmpAction中查找register方法并执行。
Struts2根据method属性查找方法有两种途径:
      1、查找与method属性值完全一致的方法
      2、查找doMethod形式的方法
 
使用动态方法调用和method属性的区别:
   <action name="empAction" class="com.syaccp.erp.action.emp.EmpAction">
            <result name="success">/WEB-INF/jsp/basic/emp_list.jsp</result>
             <result name="reload" type="redirect">empAction.action</result>
   </action>
 
    <action name="empAction_register" class="com.syaccp.erp.action.emp.EmpAction" method="register">
            <result name="success">/WEB-INF/jsp/basic/emp_register.jsp</result>
    </action>     
    <action name="empAction_login" class="com.syaccp.erp.action.emp.EmpAction" method="login">
            <result name="success">/WEB-INF/jsp/basic/emp_login.jsp</result>
    </action>
 通过以上三个配置来叙说,这三个配置实质是操作同一个Action。
    第一个动态方法模式,通过请求/empAction!register.action或者/empAction!login.action、或者/empAction.action。如果
register方法、login方法、execute方法返回值都是是"success",则都会进入emp_list.jsp页面。
    第二三个通过指定method属性,动态访问。这里register和login方法假设返回都是"success",但它们不会进入同一个页面,而是分别进入各自result指定的页面中。
由上我们分析出:
  如果同一个Action的不同方法的响应使用相同的的配置(result等),则使用动态方法调用
  如果同一个Action的不同方法的响应分别使用不同的配置,则使用action元素的method属性,为同一个Action配置多个名称。
 
通配符:
在使用method属性来实现同一个Action的不同方法处理不同的请求时,会发现,随着方法的增多,从而导致大量的Action配置,这时我们就需要通过使用通配符来解决Action配置过多的方法。
在配置<action.../>元素时,需要指定name、class、method属性。其中name属性可支持通配符,然后可以在class、method属性中使用表达式。通配符用星号 * 表示。
    <action name="empAction_*" class="com.syaccp.erp.action.emp.EmpAction" method="{1}">
            <result name="success">/WEB-INF/jsp/basic/emp_{1}.jsp</result>
    </action> 
以上配置表明,当请求/empAction_login时,通配符匹配的是login,这个值将替换{1},最终执行EmpAction的login方法,如果方法返回值为success,跳转到emp_login.jsp页面。
 
默认Action:
在浏览器输入一个不存在的Action,页面将呈现404错误,为了网站更友好,我们可以设置一个默认的Action。
设置默认Action有两种形式:
    1、配置每个包的默认Action,如果在相应的namespace下没有一个Action匹配请求,那么将执行该namespace默认的Action,不同的包,可配置不同的默认Action,配置如下:defaultAction为默认Action的name属性值,default语句必须写在首行。
<package name="default" namespace="/emp" extends="struts-default">
         <default-action-ref name="defaultAction"></default-action-ref>
        <action name="defaultAction">
            <result>/error.jsp</result>
        </action>
</package>
 
   2、在根目录下配置默认Action,不用填写namespace属性
<package name="default" extends="struts-default">
         <default-action-ref name="defaultAction"></default-action-ref>
        <action name="defaultAction">
            <result>/error.jsp</result>
        </action>

</package> 

如果声明了第一种,Struts2将会调用当前包下声明的默认Action。忽视全局的默认Action。
一般用第二种,统一默认的Action,不论在url中输入哪个目录或包下没有的Action,都显示错误页面。     
分享到:
评论

相关推荐

    Struts2--3.Action及相关-1

    综上所述,这些文件详细阐述了Struts2中Action的使用和相关配置,包括Action的创建、执行方法的指定、路径配置、通配符映射、参数处理、模型驱动以及字符编码等关键概念,为理解和构建基于Struts2的应用提供了坚实的...

    Struts2_Action学习笔记、通配符{1},{2}

    ### Struts2_Action 学习笔记与通配符配置详解 #### 一、Struts2简介及简单配置 Struts2是一个基于Java EE平台的开源Web应用框架,它继承了Struts1的优点,并在此基础上进行了大量的改进。Struts2的核心功能之一是...

    struts2笔记之动态调用Action指定方法及默认Action

    Struts2 动态调用 Action 指定方法及默认 Action 配置 Struts2 框架中,一个 Action 可以包含多个处理逻辑,而不是只有一个 execute() 方法。在实际开发中,我们经常需要在一个 Action 中实现多个处理逻辑,这样...

    struts2 通配符配置

    在Struts2中,通配符配置是一项强大的功能,它允许开发者以更灵活的方式定义Action映射,从而提高代码的复用性和配置的简洁性。这篇博客可能详细解释了如何在Struts2框架中使用通配符配置来简化Action配置。 通配符...

    struts-ex-coding.rar_ex

    4. **struts2_04_action_dmi.rar** - "DMI"可能指的是动态方法调用,Struts2的一个特性,允许不预先配置Action方法就能进行调用,增强了灵活性。 5. **struts2_05_action_param.rar** - 这部分可能讲解了如何从请求...

    struts2通配符的使用详解

    在Struts2框架中,通配符主要用于Action的配置,其核心思想是“约定优于配置”。通过预设一定的命名规则,可以利用通配符来匹配一系列类似的Action名称,从而避免对每一个具体的Action都进行显式配置。 #### 三、...

    struts2利用通配符调用同一个Action里面不同的方法

    在Struts2中,Action是业务逻辑处理的核心,而通配符的使用则是Struts2框架中一种灵活的配置方式,允许我们以更简洁的方式调用同一个Action中的不同方法。下面我们将深入探讨如何利用Struts2的通配符来实现这一功能...

    struts2通配符示例代码

    - 如果Action方法不存在,Struts2会尝试寻找默认方法(如execute),或者抛出异常。 - 要确保Action类能够处理由通配符匹配到的所有可能方法。 6. **优势和局限性** 通配符映射的优势在于简化配置和提高代码复用...

    struts2动态调用之通配符

    总的来说,Struts2的通配符动态调用是提高开发效率和代码可维护性的利器。通过合理利用这一特性,我们可以减少配置文件的冗余,使项目结构更加清晰,同时也便于扩展和维护。在实际开发中,应熟练掌握并灵活运用这一...

    Struts2动态方法调用

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

    Struts2通配符

    ### Struts2通配符详解 #### 一、引言 Struts2是基于MVC设计模式的一个开源框架...通过对不同类型的通配符配置进行了解和实践,开发者能够更好地掌握Struts2框架的核心技术,从而构建出更加灵活和高效的Web应用程序。

    struts2一个action处理多个请求 struts2实例

    但通过`method`属性,我们可以指定特定的请求调用Action类中的不同方法。例如: ```xml &lt;action name="myAction" class="com.example.MyAction"&gt; &lt;result name="saveSuccess"&gt;/success.jsp ...

    Struts2基础总结-1

    - 可以通过实现`Action`接口来访问框架提供的方法和属性。 - **第三种**:创建类并继承`ActionSupport`类(最常用)。 - 继承`ActionSupport`可以获得框架的很多默认特性,如日志支持、验证支持等。 ##### 1-5、...

    初级struts2应用-学生信息管理系统

    Action类通常继承自`org.struts2.interceptor.struts2.ActionSupport`,并重写execute方法。在这个学生信息管理系统中,可能会有一个名为`StudentAction`的类,用于处理与学生信息相关的操作,如添加、删除、修改和...

    struts2通配符示例

    例如,如果请求URL是`user_add_save`,那么`add`和`save`将分别被赋值给Action类的`method1`和`method2`属性(假设这些属性存在)。这样,我们就可以根据不同的请求执行不同的业务逻辑。 4. **结果页面动态生成**:...

    struts2 action 配置方法 &&struts2的配置文件

    在实际开发中,理解并熟练掌握这些配置方法和配置文件,可以极大地提高Struts2应用的灵活性和可维护性。正确配置Action不仅可以简化代码结构,还能使应用更易于扩展和调试。同时,通过调整`struts.properties`,可以...

    Struts2教学视频

    Struts2支持Action的动态方法调用,允许Action类根据请求参数动态选择要执行的方法,而无需预先在struts.xml中硬编码。 **八、Action通配符(wildcard)的配置** 通配符配置允许为一组相似的Action定义一个通用配置,...

    struts2 action的三种访问方式

    本篇文章将详细介绍Struts2 Action的三种访问方式:传统方式、通配符方式和动态方式。 1. **传统方式(Static Dispatch)** 传统方式是最基础的Action访问方式,通过硬编码URL来映射Action。在`struts.xml`配置...

    传智播客struts2.1源代码_动态方法

    总的来说,理解和掌握Struts2.1中的动态方法调用和通配符定义是提升Java Web开发能力的重要步骤。这两个特性提供了更高的灵活性,使得开发者能够更高效地设计和管理Action类,同时也简化了URL映射的配置。通过深入...

    Struts2典型小实例源代码

    这里的`execute()`方法是Struts2默认调用的方法,而`method1()`和`method2()`是自定义的方法,它们通过`&lt;action&gt;`标签在struts.xml配置文件中进行映射。 接下来,配置文件`struts.xml`是Struts2的核心配置,它定义...

Global site tag (gtag.js) - Google Analytics