众所周知,默认条件下,在浏览器输入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理解--动态方法和method属性及通配符_默认Action相关推荐

  1. javascript:函数的apply,call方法和length属性

    看js的资料,随手记下一些认为实用的东东,以飨和我一样正在学习的诸位看官.      "JavaScript 为函数对象定义了两个方法:apply 和call,它们的作用都是将函数绑定到另外 ...

  2. Struts2的动态Action实现

    在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多. 一.指定method属性 在struts.xml中指定action的met ...

  3. Struts2通配符映射/Struts action name=/*/* method={2} class=com.jxc.action.{1}Action result

    struts2的关于method="{1}"意思详解 <action   name= "Login_* "   method= "{1} &qu ...

  4. asp.net TemplateField模板中的Bind方法和Eval方法

    TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现.以下是Bind方法的格式,Eval的格式也是和Bind一样的. Bind("列 ...

  5. vue修改计算属性的值_「Vue学习记录五」计算属性和侦听器

    1: 计算属性: (内置缓存机制) 当更改age的时候, fullName 函数不执行: 当更改fristName的时候, fullName 函数才执行 <div id = "app& ...

  6. 深入理解List的toArray()方法和toArray(T[] a)方法

    深入理解List的toArray()方法和toArray(T[] a)方法 这两个方法都是将列表List中的元素转导出为数组,不同的是,toArray()方法导出的是Object类型数组,而toArr ...

  7. jqgrid和ajax的区别,理解jqGrid的添加方法和Ajax请求

    我有一个现有的项目,我需要维护,但是这是我第一次满足的jqGrid ...理解jqGrid的添加方法和Ajax请求 主要是,我有一个Product,即可以有多个Formule小号.每个Formule可 ...

  8. java中RIGHT的值_java循环遍历, reduce(),reduceRight()方法和Object,keys遍历对象的属性...

    最近几年,随着高新技术的不断出现,各种编程软件也开始进入到人们的视野当中.今天就来为大家说一下java编程语言的基础知识,也就是java循环遍历, reduce(),reduceRight()方法和O ...

  9. [Java 基础] 深入理解List的toArray()方法和toArray(T[] a)方法

    深入理解List的toArray()方法和toArray(T[] a)方法 这两个方法都是将列表List中的元素转导出为数组,不同的是,toArray()方法导出的是Object类型数组,而toArr ...

  10. 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Pe

    题目: 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加. 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法, ...

最新文章

  1. lua创建文件和文件夹
  2. 2022年如何学习自动化测试?这篇文章告诉你
  3. Xamarin图表开发基础教程(11)OxyPlot框架支持的图表类型
  4. Linux内核网络(一)——初探内核网络
  5. Atom 编辑器实时预览 HTML 页面
  6. python实训总结万能版3000字_实训总结万能版2000字范文五篇
  7. html5专著,参考文献专著
  8. 自适应阈值算法(大津阈值法)
  9. http状态码一览表--刚开始测试的小朋友一定要收藏!!!
  10. python2.7 tab,自动补全
  11. 17.Mongodb预分片(pre-split)/autosplit(chunk/jumbochunk相关)
  12. 1.性能之巅 洞悉系统、企业与云计算 --- 绪论
  13. python new 干什么用_详解Python中的__new__()方法的使用
  14. linux环境下cmake安装及使用
  15. JAVA电商商城系统
  16. cad怎么导出jpg图片格式?
  17. 高通 mdm9607编译以及audio框架
  18. 跨三服务器维护,DNF卢克跨区再度波动?策划:不是很想维护跨三服务器了
  19. windows动态库和静态库
  20. matlab 水文断面,基于MATLAB的河道横断面的绘制

热门文章

  1. 好的项目需要有好的需求
  2. python 调用github的api,呈现python的受欢迎的程度
  3. MySQL Binlog--事务日志和BINLOG落盘参数对磁盘IO的影响
  4. React-Native 爬坑爬坑
  5. Python爬虫基础之Urllib
  6. 在mac上用parallels创建双windows虚拟机调试windows驱动
  7. BZOJ 4520: [Cqoi2016]K远点对
  8. java一个简单的管理系统
  9. python + Eclipse + Pydev 安装
  10. python学习笔记之module package