Action方法调用
一、Action访问路径 Action的访问路径是由struts.xml文件中配置的Action所在包的命名空间,Action的名字和常struts.action.extension共同决定的 例如:
- <constant name="struts.action.extension" value="action, ," />
- <package name="default" namespace="/" extends="struts-default">
- <action name="hello">
- <result>/1.jsp</result>
- </action>
- </package>
- <package name="a" namespace="/a" extends="struts-default">
- <action name="hello">
- <result>/2.jsp</result>
- </action>
- </package>
<constant name="struts.action.extension" value="action, ," />
<package name="default" namespace="/" extends="struts-default">
<action name="hello">
<result>/1.jsp</result>
</action>
</package> <package name="a" namespace="/a" extends="struts-default">
<action name="hello">
<result>/2.jsp</result>
</action>
</package>
访问default包下的名字叫hello的Action,须运行路径:/hello 或 /hello.action 访问a包下的名字叫hello的Action,须运行路径:/a/hello 或 /a/hello.action 如果将struts.action.extension的值修改成do
- <constant name="struts.action.extension" value="do,action" />
<constant name="struts.action.extension" value="do,action" />
访问a包下的名字叫hello的Action,须运行路径:/a/hello.do 或 /a/hello.action
包的命名空间 每个包的命名空间不同,包中的Action不能同名,不同包的Action可以同名 同一个Web应用有可能出现同名Action,把它们放在不同的命名空间下,可以避免访问冲突。 如果在某Action在该命名空间找不到,就在默认命名空间找,在默认命名空间还找不到就会报错
按照上面的配置 访问 /hello.action 则跳转 /1.jsp 访问 /a/hello.action 则跳转 /2.jsp 访问 /b/hello.action 则跳转 /1.jsp 访问 /b/hi.action 则找不到页面,报异常
二、Action方法调用与动态方法调用 Action接收请求默认调用execute方法,但这已经满足不了我们的需求。通常我们会把一个业务模块的所有请求定义在同一个Action类,这就需要Action类提供更多的方法处理不同的请求,而不仅仅是一个execute方法。 例如我们想定义一个用户模块的增删查改请求,就可以采取如下方式实现
- package com.puckasoft.web.action;
- public class UserAction {
- public String saveUser() throws Exception{
- System.out.println("添加用户");
- return null;
- }
- public String updateUser() throws Exception{
- System.out.println("修改用户");
- return null;
- }
- public String deleteUser() throws Exception{
- System.out.println("删除用户");
- return null;
- }
- public String showUser() throws Exception{
- System.out.println("查询用户");
- return null;
- }
- }
package com.puckasoft.web.action; public class UserAction {
public String saveUser() throws Exception{
System.out.println("添加用户");
return null;
}
public String updateUser() throws Exception{
System.out.println("修改用户");
return null;
}
public String deleteUser() throws Exception{
System.out.println("删除用户");
return null;
}
public String showUser() throws Exception{
System.out.println("查询用户");
return null;
}
}
配置方法一:action方法调用
- <package name="user" namespace="/user" extends="struts-default">
- <action name="save" class="com.puckasoft.web.action.UserAction"
- method="saveUser"></action>
- <action name="update" class="com.puckasoft.web.action.UserAction"
- method="updateUser"></action>
- <action name="delete" class="com.puckasoft.web.action.UserAction"
- method="deleteUser"></action>
- <action name="show" class="com.puckasoft.web.action.UserAction"
- method="showUser"></action>
- </package>
<package name="user" namespace="/user" extends="struts-default">
<action name="save" class="com.puckasoft.web.action.UserAction"
method="saveUser"></action>
<action name="update" class="com.puckasoft.web.action.UserAction"
method="updateUser"></action>
<action name="delete" class="com.puckasoft.web.action.UserAction"
method="deleteUser"></action>
<action name="show" class="com.puckasoft.web.action.UserAction"
method="showUser"></action>
</package>
运行路径路径格式: 包的命名空间/Action的名字
用户添加 /user/save.action 用户更新 /user/update.action 用户删除 /user/delete.action 用户查看 /user/show.acton 配置方法二:action动态方法调用DMI
- <constant name="struts.enable.DynamicMethodInvocation" value="true" />
- <package name="user" namespace="/user" extends="struts-default">
- <action name="index" class="com.puckasoft.web.action.UserAction"/>
- </package>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="user" namespace="/user" extends="struts-default">
<action name="index" class="com.puckasoft.web.action.UserAction"/>
</package>
运行路径格式:包的命名空间/Action的名字!Action类中定义的方法名 用户添加 /user/index!saveUser.action 用户更新 /user/index!updateUser.action 用户删除 /user/index!deleteUser.action 用户查看 /user/index!showUser.acton 只用设置常量struts.enable.DynamicMethodInvocation为true才能执行动态调用,它默认是开启的。
配置方法三:使用通配符定义Action 使用通配符,将配置量降到最低。 在action元素的name属性中可以使用*通配符,它可以匹配除了/以外的多个连续字符,在action元素的class和method属性以及 result元素中可以引用*通配符在访问期间实际匹配的内容
- <package name="user" namespace="/user" extends="struts-default">
- <action name="*" class="com.puckasoft.web.action.UserAction" method="{1}User"/>
- </package>
<package name="user" namespace="/user" extends="struts-default">
<action name="*" class="com.puckasoft.web.action.UserAction" method="{1}User"/>
</package>
运行路径路径格式: 包的命名空间/Action的名字
用户添加 /user/save.action 用户更新 /user/update.action 用户删除 /user/delete.action 用户查看 /user/show.acton
Action方法调用的更多相关文章
- struts2内Action方法调用
1.struts2流程: jsp页面-->web.xml-->struts.xml-->user.acrion-->UserAction.java 中的execute()--r ...
- Struts2学习笔记 - Action篇<动态方法调用>
有三种方法可以使一个Action处理多个请求 动态方法调用DMI 定义逻辑Acton 在配置文件中使用通配符 这里就说一下Dynamic Method nvocation ,动态方法调用,什么是动态方 ...
- 第三章Struts2 Action中动态方法调用、通配符的使用
01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问Servl ...
- struts之动态方法调用改变表单action属性
一.动态方法调用(DMI:Dynamic Method Invocation) ⒈struts2中同样提供了这个包含多个逻辑业处理的Action,这样就可以在一个Action中进行多个业务逻辑处理 ...
- Struts2 Action中动态方法调用、通配符的使用
一.Struts2执行过程图: 二.struts2配置文件的加载顺序 struts-default.xml---struts-plugin.xml---struts.xml 具体步骤: 三.Actio ...
- 在MVC或WEBAPI中记录每个Action的执行时间和记录下层方法调用时间
刚才在博客园看了篇文章,http://www.cnblogs.com/cmt/p/csharp_regex_timeout.html 突然联想到以前遇到的问题,w3wp进程吃光CPU都挂起IIS进程 ...
- Struts2中使用execAndWait后,在 Action中调用getXXX()方法报告java.lang.NullPointerException异常的原因和解决方法
使用 Struts2 编写页面,遇到一个要长时间运行的接口,因此增加了一个execAndWait ,结果在 Action 中调用 getContext()的时候报告异常 ActionContext c ...
- Struts2学习---基本配置,action,动态方法调用,action接收参数
首先我们先来直接配置,然后再来讲原理: 第一步:jar包的引入: 我们可以到struts2的官网上下载: http://struts.apache.org/download.cgi#struts251 ...
- Struts2-整理笔记(二)常量配置、动态方法调用、Action类详解
1.修改struts2常量配置(3种) 第一种 在str/struts.xml中添加constant标签 <struts> <!-- 如果使用使用动态方法调用和include冲突 - ...
随机推荐
- 移动APP安全在渗透测试中的应用
安全爱好者研究的往往是app的本地安全,比如远控.应用破解.信息窃取等等,大多人还没有关注到app服务端的安全问题,于是在这块的安全漏洞非常多. 移动app大多通过web api服务的方式跟服务端交互 ...
- C# Json 序列化和反序列化 工具类 Newtonsoft.Json.dll
引用: Newtonsoft.Json.dll // 引用: using Newtonsoft.Json; using Newtonsoft.Json.Converters; // 定义 实体测试类 ...
- KafkaConsumer对于事务消息的处理
Kafka添加了事务机制以后,consumer端有个需要解决的问题就是怎么样从收到的消息中滤掉aborted的消息.Kafka通过broker和consumer端的协作,利用一系列优化手段极大地降低了 ...
- g++ 静态库连接顺序的巨坑
在编译最新版本(12.04)的alljoyn的chat示例的时候,想使用bundle daemon,依照在以前的经验修改文件:alljoyn-14.02.00-src/build/linux/x86_ ...
- [Algorithm] Find Nth smallest value from Array
Q1: Find the smallest value from array: function findMin(arr) { let min = arr[0]; for (let i = 1; i ...
- 云计算之路-试用Azure:数据库备份压缩文件在虚拟机上的恢复速度测试
测试环境:Windows Azure上海机房,虚拟机配置为大型(四核,7 GB 内存),磁盘情况见下图. 数据库备份压缩文件大于为12.0 GB (12,914,327,552 bytes),放置于T ...
- 并发编程系列小结(线程安全,synchronized,脏读,线程间的通信wait/notify,线程的三种实现方式Demo,可替代wait/notify的方法)
线程安全: 当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法就是线程安全的) synchronized: 可以在任意对象或方法上加锁,而加锁的这段代码称为 ...
- NoSQL数据库介绍(2)
2 NoSQL潮流 在这一章中,将一起讨论NoSQL潮流的动机和主要驱动力.以及NoSQL主张的批评和反馈.本章将通过不同的尝试得出结论来分类和描写叙述NoSQL数据库.当中一个分类法将在随 ...
- WebDriver API——第3部分Action Chains
The ActionChains implementation, class selenium.webdriver.common.action_chains.ActionChains(driver) ...
- 网页会计系统 FrontAccounting
FrontAccounting (FA)是一个针对企业ERP供应链的网页会计系统.FA 允許多使用者.多語系和多國貨幣. FA允许多使用者.多语系和多国货币.FA接续OpenAccounting (O ...