struts中的各种action类

1 概述

   Struts框架中的控制器角色是由一个中心servlet类和众多的Action类合作扮演的。中心Servlet类为控制器提供中心控制点来初步处理多有的用户请求,并选择一个Action来处理具体的业务逻辑,或者本身实现一定的业务逻辑,并决定下一步向用户返回哪一个视图组件。

 

在Struts框架包中,中心Servlet的默认实现是org.apache.struts.action.ActionServlet 类。

 

 

 2 Struts初始化过程

 

    从加载ActionServlet开始,当ActionServlet接收到一个用户请求时候,会执行以下流程。

 

 (1) 检索和用户请求相匹配的ActionMapping实例。

 

 (2)如果为ActionMapping配置了form ,则获取对应范围内的ActionForm实例,如果ActionFrom不存在,就创建一个,把客户提交的表单数据保存到ActionFrom中。

 

  (3)根据ActionMapping的配置信息决定是否验证表单。

 

  (4)ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action。

 

  (5)Action的execute()方法返回一个ActionForward对象,ActionServlet将请求转发到这个ActionForward对象指向的组件,通常是一个jsp或者害是其他的Action 。

 

 

 

3  Actionservlet类

 

4 Action类

 

 用户请求和业务逻辑之间的桥梁, 每个Action负责处理不同的请求,每个Action都要实现execute()方法。

 有些大牛在action中使用了门面模式使action中的代码十分简洁。 Action类的实例是线程安全的,Struts为每个Action类只创建一个实例,所有的用户共享一个实例,并且所有的请求可以同时执行Action实例的execute()方法。

 

 (2)支持多线程的Action类

 

  在Struts 的生命周期中,为每个Action类创建一个单独的Action实例。每个用户请求共享一个实例,因此必须保证Action类在多线程环境中正确运行。

 

 

 

5 ActionForward 类

 

  该类代表了web 的资源抽象,典型的web资源是一个jsp页面或者是servlet,也可以是另外一份Action ,创建该类的对象有两种方式。

  (1 )

 return new ActionForward("Success" , "/shop/listOrder.jsp");

 

  (2) 在配置文件中配置<forward>元素。

 

6 Struts预定义的Action类

 

   (1) ForwardAction类 和 InclucdeAction 类

 

   ForwardAction 类实现的功能类似于jsp动作<jsp:forward>,都是将请求转发到其他的web组件。

  当仅仅需要从一个jsp页面到另一个jsp页面的请求转发操作时,并不一定需要一个真正的Action,这时可以考虑在Struts内建一个实现了      forward功能的ForwardAction类。 该类仅仅是转发,没有其他的业务请求。

 

 

 

  (2) DispatchAction类 和 LookupDispatchAction 类

 

      DispatchAction类  通常在Action类中只完成一个业务操作,如果在一个Action类中完成一组紧密相关的业务操作,可是使用DispatchAction类。可以通过创建一个DispatchAction类的子类,来执行一组业务相关的操作。(实质为一个分发action)

 

   创建一个扩展DispatchAction类的子类时候,不必覆盖execute()方法,而是创建一些一些实现具体业务操作的方法。这些方法与execute()方法有着一样的参数和返回值,以及可能抛出的异常。但是在配置DispatchAction时需要指定parameter属性为method ,用以指明调用的方法。

 

 

 

 

(3)LookDispatchAction 

 

      LookDispatchAction 类是DispatchAction类的一个子类,在LookDispatchAction 类中也可以定义多种利用业务的方法,每种方法的调用都是由配置文件中的一个特殊请求参数的值决定的。两者之间的不同之处在于,DispatchAction利用请求参数的值确定调用哪种方法,而KookupDispatchAction利用请求参数值,反向查询资源绑定,并将它们与类中的一种方法绑定。通常LookupDispatchAction用于在多个同名提交按钮的场合。如两个按钮具有相同的actionz,但是每个按钮的value值不同,每个按钮就将映射到不同的方法。

 

 

   1 首先在资源文件中定义使用到得键值

       如 test.add = add  , test.remove = remove 。

 

   2 创建一个LookupDispatchAction 类的子类。

扩展LookDispatchAtion类,需要实现 getKeyMethodMap()方法,这种方法返回一个Map类的对象,
LookupDisaptchAction就是从这个Map对象中查找与按钮名称对应的方法。

 

  /*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package cn.bupt.duming.struts.action;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.LookupDispatchAction;
import cn.bupt.duming.struts.form.LoginForm;

/**
* MyEclipse Struts
* Creation date: 02-25-2010
*
* XDoclet definition:
* @struts.action path="/testLook" name="loginForm" parameter="method" scope="request" validate="true"
*/
public class TestLookAction extends LookupDispatchAction {
/*
* Generated Methods
*/




/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
return null;
}
public ActionForward remove(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
return null;
}

@Override
protected Map getKeyMethodMap() {
// TODO Auto-generated method stub
Map map = new HashMap() ;
map.put("test.add", "add") ;
map.put("test.remove", "remove") ;

return map ;
}

}

 

 

 

3 编写jsp页面代码。。

     注意submit中的元素 property 值应该和action中的parameter相一致

 

  <html:form action="/testLook.do" method="post">
<html:submit property = "method">
<bean:message key="test.add"/>
</html:submit>

<html:submit property = "method">
<bean:message key="test.remove"/>
</html:submit>

</html:form>

 

 

 

经过上面三个步骤即完成了LookUpDispatchAction的创建。。。

 

 

 

 

  7 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值