java.lang.Object
org.apache.struts.action.Action
org.apache.struts.actions.DispatchAction
org.apache.struts.actions.LookupDispatchAction(Struts1.1)
org.apache.struts.actions.EventDispatchAction(Struts1.2.9)
org.apache.struts.actions.MappingDispatchAction(Struts1.2)
DispatchAction
public abstract class DispatchAction extends Action
这是一个抽象的Action,它会根据request 中的parameter来执行相应的方法。通个这个Action类可以将不同的Action集中到一个Action文件中来。
struts-config.xml:
<action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="method"/>
在Action中要有相应的方法:
public class SubscriptionAction extends DispatchAction {
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
public ActionForward update(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
}
然后可以通过这样的方法来访问你的程序:
http://localhost:8080/myapp/subscription.do?method=delete
http://localhost:8080/myapp/subscription.do?method=insert
http://localhost:8080/myapp/subscription.do?method=update
如果parameter中参数为空,则调用Action中的unspecified方法
LookupDispatchAction
public abstract class LookupDispatchAction extends DispatchAction
通过这个Action抽象类继承DispatchAction,它的相应方法的执行由ActionMapping中parameter属性决定。每个动作实际上就是<html:submit>标签的property属性值。它适合在一个form中有很多按钮,按不同的按钮则执行不同的操作。
struts-config.xml:
<action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm" scope="request"
input="/subscription.jsp" parameter="method"/>
ApplicationResources.properties:
button.add=Add Record
button.delete=Delete Record
JSP:
<%@ page pageEncoding="GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<title>多提交演示</title>
</head>
<body>
<html:form action="subscription">
<html:submit property="method">
<bean:message key="button.add"/>
</html:submit>
<html:submit property="method">
<bean:message key="button.delete"/>
</html:submit>
</html:form>
</body>
</html>
在Action中必须实现getKeyMethodMap方法:
public class SubscriptionAction extends LookupDispatchAction {
protected Map getKeyMethodMap() {
Map map = new HashMap();
map.put("button.add", "add");
map.put("button.delete", "delete");
return map;
}
public ActionForward add(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
public ActionForward delete(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
}
EventDispatchAction
public class EventDispatchAction extends DispatchAction
通过这个Action抽象类继承DispatchAction,它的相应方法的执行由ActionMapping中parameter属性指定多个动作,中间用逗号(,)分隔。每个动作实际上就是<html:submit>标签的property属性值。它适合在一个form中有很多按钮,按不同的按钮则执行不同的操作。
struts-config.xml:
(parameter中的"recalc=recalculate"意思为<html:submit>标签的property属性值为recalc调用recalculate方法,出于安全考虑能够隐藏后台的业务方法名。"defaule=save"这是可选的,没有配置property属性的<html:submit>标签将调用defaule中设置的方法名,如果defaule没有指定任何参数,则调用Action中的unspecified方法)
<action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm" scope="request"
input="/subscription.jsp" parameter="save,back,recalc=recalculate,default=save"/>
JSP:
<%@ page pageEncoding="GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<title>多提交演示</title>
</head>
<body>
<html:form action="subscription">
<html:submit property="save" value="保存"/>
<html:submit property="back" value="后退"/>
<html:submit property="recalc" value="重新计算"/>
</html:form>
</body>
</html>
在Action中要有相应的方法:
public class SubscriptionAction extends LookupDispatchAction {
public ActionForward save(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
public ActionForward back(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
public ActionForward recalculate(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
}
MappingDispatchAction
public class MappingDispatchAction extends DispatchAction
它的相应方法的执行由ActionMapping中parameter名决定,注意这里和LookupDispatchAction不同,LookupDispatchAction的相应方法的执行由ActionMapping中parameter属性决定。
struts-config.xml:
<action path="/createSubscription" type="org.example.SubscriptionAction" parameter="create">
<forward name="success" path="/createSubscription.jsp"/>
</action>
<action path="/editSubscription" type="org.example.SubscriptionAction" parameter="edit">
<forward name="success" path="/editSubscription.jsp"/>
</action>
<action path="/saveSubscription" type="org.example.SubscriptionAction" parameter="save"
name="subscriptionForm" validate="true" input="/editSubscription.jsp" scope="request">
<forward name="success" path="/savedSubscription.jsp"/>
</action>
<action path="/deleteSubscription" type="org.example.SubscriptionAction" name="subscriptionForm"
scope="request" input="/subscription.jsp" parameter="delete">
<forward name="success" path="/deletedSubscription.jsp"/>
</action>
<action path="/listSubscriptions" type="org.example.SubscriptionAction" parameter="list">
<forward name="success" path="/subscriptionList.jsp"/>
</action>
在Action中要有相应的方法:
public class SubscriptionAction extends MappingDispatchAction {
public ActionForward create(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
public ActionForward edit(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
public ActionForward list(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {}
}
然后可以通过这样的方法来访问你的程序:
http://localhost:8080/myapp/create.do
http://localhost:8080/myapp/edit.do
http://localhost:8080/myapp/save.do
http://localhost:8080/myapp/delete.do
http://localhost:8080/myapp/list.do
如果parameter中参数为空,则调用Action中的unspecified方法
编辑特别推荐:
总结Java标准类库中类型相互转化的方法
实例讲解main()中方法调用的问题
一个Java小球撞击墙面的小程序
分享到:
相关推荐
这种方式简单,但存在几个缺点:首先,Action与Spring紧密耦合,不利于更换其他IoC容器;其次,不利于利用Spring的AOP特性;最后,不适用于使用DispatchAction的Struts应用。 2. **使用DelegatingRequestProcessor...
除了DispatchAction之外,Struts框架还提供了其他几种常用的Action类,包括: - **ForwardAction**:用于简单的页面跳转。 - **IncludeAction**:通过包含的方式响应用户请求,而不是完全转发到新的页面。 - **...
针对上述问题,我们可以采用以下几种方法来优化Action的设计: 1. **DispatchAction** - **定义**:`DispatchAction`是Struts框架提供的一种特殊的`Action`实现,它可以在一个Action中根据不同的请求参数执行不同...
Struts+Hibernate+...4.7. transaction有那几种实现 21 4 综合部分 21 4.1. Hibernate和spring中常出现的几个异常 21 4.2. Hibernate与jdbc的联系 22 4.3. Hibernate与spring的联系 22 4.4. 项目中为什么使用SSH 23
73.8. transaction有那几种实现(事务处理)(Spring) 79 73.9. Spring IoC 79 73.10. Spring AOP面向方面编程 82 74. 项目中为什么使用SSH 85 75. Spring在SSH中的作用 86 76. weblogic 86 76.1. 如何给weblogic指定...
而DispatchAction则是一种特殊的Action,它可以处理多个请求,提高了代码的复用性。 接下来,我们通过一个简单的例子来了解Struts1的应用。假设我们要创建一个用户登录的功能。首先,创建一个名为LoginForm的...
在IT行业中,动态表单(Dynamic Form)是一种常见的前端开发技术,它允许用户根据特定需求自定义表单字段,提供灵活的数据输入界面。本案例主要关注动态表单的实现,特别是涉及错误提示和动态生成表单功能的实现。...
ECharts地图下钻功能通常涉及到以下几个关键知识点: 1. **ECharts库**:ECharts是一款基于JavaScript的开源图表库,支持丰富的图形类型,包括柱状图、折线图、饼图以及各种地理图表。其地图组件能够加载自定义地图...
public class LookupDispatchAction extends DispatchAction { public ActionForward method1(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ...
根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### Struts 测试方法及优化建议 在 Struts 的应用开发过程中,对于 Action 类的测试是非常重要的一个环节。在给定的代码示例中,作者提到了一种传统的...
Struts2框架在设计上更加灵活和强大,其主要特性包括但不限于以下几点: 1. **统一性**:Struts2结合了Struts1和WebWork的优点,实现了两者的完美融合。 2. **灵活性**:相较于Struts1,Struts2在处理Action的方式...
【Java工程师项目经验】在Java工程师的简历中,通常会包含以下几个关键知识点: 1. **CoreJava编程**:这是Java的基础,包括面向对象编程、集合框架、多线程、异常处理、I/O流等,良好的代码规范和注释习惯是专业...
构建Struts1.x开发环境通常涉及以下几个步骤: 1. **导入依赖**:首先,你需要将Struts库中的所有jar文件引入到你的项目中,这些文件通常位于`struts/lib`目录下,包含了Struts框架运行所需的类库。 2. **配置web....
为了实现文件上传功能,主要会用到以下几个类和技术: 1. **ActionForm**:Struts1中的表单对象,用于封装用户提交的数据。 2. **ActionMapping**:表示一个请求映射,用于连接ActionForm和Action。 3. **Action**...
在Java编程中,反射是一种强大的机制,允许程序在运行时检查和修改自身结构和行为。然而,当开发者尝试使用反射调用一个不存在的方法时,便会遇到`java.lang.NoSuchMethodException`异常。本文将深入探讨此异常,...
- DispatchAction:Struts1.x中的一种扩展Action,可以处理多个请求方法,每个方法对应一个特定的操作。 - ActionForm:用户的输入数据会被封装到ActionForm对象中,然后传递给Action处理。 - Action Mapping:...
在IT领域,地图可视化是一种非常重要的数据展示方式,尤其在地理数据分析、城市规划、交通管理等领域。ECharts,一个由百度开发的开源JavaScript图表库,提供了丰富的图表类型,包括地图图表,可以很好地满足这种...