`
在水伊方
  • 浏览: 106889 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Struts2--动态方法调用和使用通配符定义action

阅读更多

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,这会降低程序的效率。

1
0
分享到:
评论

相关推荐

    struts2动态调用之通配符

    struts2动态调用之通配符,相当于是改进的method动态调用方法,减少对同一action不同method的多次配置

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

    struts2利用通配符调用同一个Action里面不同的方法,在struts.xml配置文件中将请求方法的不相同部分抽象成“*".

    struts2 详解文档

    动态方法调用和使用通配符定义action 请求参数接收 自定义类型转换器 全局类型转换器 访问或添加几个属性 文件上传 多文件上传 自定义拦截器 对Action中所有方法进行输入校验 对Action指定方法进行校验 ...

    Struts2 in 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...

    Struts2 学习笔记

    七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 九、 Action的属性接收参数 10 1、 在Action添加成员属性接受参数 10 2、 域模型(Domain Model) 10 3、 ModelDriven接收参数 11 十、 Action属性...

    Struts2帮助```````

    七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 九、 Action的属性接收参数 10 1、 在Action添加成员属性接受参数 10 2、 域模型(Domain Model) 10 3、 ModelDriven接收参数 11 十、 Action属性...

    Struts2全解Struts2全解

    Namespace、自定义Action、路径问题、通配符、包含模块配置文件、默认Action、接受用户输入、服务器跳转、Action中访问web元素、简单数据校验、调用Action的自定义方法 5struts2国际化 ......... 6 struts2输入校验...

    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....

    struts2Demo

    整合spring, hibernate实现的CRUD操作 6./wildcard - 使用通配符,替代零配置 - 通配符不支持actionName!methodName类型的动态方法调用,也只能配置一个package 7./fileupload - 文件上传 &lt;br&gt;本资源来自...

    深入浅出Struts2(附源码)

    本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...

    struts应用5

    ). result 节点的 name、type 属性的具体含义 2)、讲授 dispatcher、redirect、redirectAction、chain 等结果类型 3)、讲授 Struts2 的 exception 映射 4)、 讲授 action 配置的通配符 ...5)、 讲授动态方法调用

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    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...

    ssh(structs,spring,hibernate)框架中的上传下载

    此外,JDK的动态代理只对接口有效,否则必须使用CGLIB生成目标类的子类。我们依从于Spring的倡导为业务类定义一个接口:  代码 7 业务层操作接口 1. public interface FileService 2. { 3. void save...

    java命名规范 开发规范

    2. Action类相应方法使用封装好的HttpClient相关工具类,准备好HTTP请求的相关参数header参数和body参数并以xml的方式提交HTTP请求; 3. 解析该HTTP请求返回值(XML或JSON); 4. 响应结果; 5. 测试; 备注: 开发...

    struts2深入浅出(备java基础,javaweb,javaee,框架)

    Struts2框架介绍、工作原理与架构分析、6大配置文件分析使用通配符定义action、动态方法调用,ActionContext及ServletActionContext使用,模型驱动、属性驱动,默认转换器的介绍,中的表单校验,中的国际化,文件...

    J2EE应用开发详解

    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 ...

Global site tag (gtag.js) - Google Analytics