struts2中的动态方法调用(Dynamic method Invoc)--2.0后的版本不推荐使用
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" />
value的默认值为true。
使用通配符定义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,这会降低程序的效率。
相关推荐
struts2动态调用之通配符,相当于是改进的method动态调用方法,减少对同一action不同method的多次配置
struts2利用通配符调用同一个Action里面不同的方法,在struts.xml配置文件中将请求方法的不相同部分抽象成“*".
动态方法调用和使用通配符定义action 请求参数接收 自定义类型转换器 全局类型转换器 访问或添加几个属性 文件上传 多文件上传 自定义拦截器 对Action中所有方法进行输入校验 对Action指定方法进行校验 ...
15.2 动态方法调用 310 15.2.1 通配符方法的选择 310 15.2.2 动态工作流 312 15.3 使用令牌防止表单重复提交 313 15.3.1 使用s:token/表单标签 313 15.3.2 令牌拦截器规则的例外 314 15.4 自动显示等待页面 316 15.5...
七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 九、 Action的属性接收参数 10 1、 在Action添加成员属性接受参数 10 2、 域模型(Domain Model) 10 3、 ModelDriven接收参数 11 十、 Action属性...
七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 九、 Action的属性接收参数 10 1、 在Action添加成员属性接受参数 10 2、 域模型(Domain Model) 10 3、 ModelDriven接收参数 11 十、 Action属性...
Namespace、自定义Action、路径问题、通配符、包含模块配置文件、默认Action、接受用户输入、服务器跳转、Action中访问web元素、简单数据校验、调用Action的自定义方法 5struts2国际化 ......... 6 struts2输入校验...
10.为什么要使用struts2代替struts1.x 7 二、struts.xml配置及例程 7 1.配置文件的优先级 7 2.配置形式 8 3.package配置相关 8 4.分工合作include:指定多个配置文件 10 5.tomcat认证访问 10 6.初识拦截器 11 7....
整合spring, hibernate实现的CRUD操作 6./wildcard - 使用通配符,替代零配置 - 通配符不支持actionName!methodName类型的动态方法调用,也只能配置一个package 7./fileupload - 文件上传 <br>本资源来自...
本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...
). result 节点的 name、type 属性的具体含义 2)、讲授 dispatcher、redirect、redirectAction、chain 等结果类型 3)、讲授 Struts2 的 exception 映射 4)、 讲授 action 配置的通配符 ...5)、 讲授动态方法调用
24.2 Tiles布局和定义 303 24.2.1 布局页面 303 24.2.2 Tiles定义 304 24.3 Struts Tiles插件 305 24.4 Struts Tiles示例 306 24.5 小结 309 第25章 JFreeChart插件 310 25.1 JFreeChart API 310 25.1.1 JFreeChart...
此外,JDK的动态代理只对接口有效,否则必须使用CGLIB生成目标类的子类。我们依从于Spring的倡导为业务类定义一个接口: 代码 7 业务层操作接口 1. public interface FileService 2. { 3. void save...
2. Action类相应方法使用封装好的HttpClient相关工具类,准备好HTTP请求的相关参数header参数和body参数并以xml的方式提交HTTP请求; 3. 解析该HTTP请求返回值(XML或JSON); 4. 响应结果; 5. 测试; 备注: 开发...
Struts2框架介绍、工作原理与架构分析、6大配置文件分析使用通配符定义action、动态方法调用,ActionContext及ServletActionContext使用,模型驱动、属性驱动,默认转换器的介绍,中的表单校验,中的国际化,文件...
118 8.3.5 Struts2配置文件 119 8.4 Action的配置方式 121 8.4.1 动态方法调用 121 8.4.2 设置action元素的method属性 122 8.4.3 使用通配符配置action 122 8.4.4 默认action 123 8.5 拦截器Interceptor 123 8.5.1 ...