`
ytuwlg
  • 浏览: 92750 次
  • 性别: Icon_minigender_1
  • 来自: 威海
社区版块
存档分类
最新评论

iBATIS demo jpetstore 对 struts 的灵活应用 。

    博客分类:
  • java
阅读更多
demo中为了减少application 对struts的依赖性,主要做了以下三方面:
1.BeanAction类,demo中将业务处理从原先继承Action类的处理类中分离出来,将原先分离的Action和Form整合在一起作为bean。demo的struts-config.xml中所有请求转向BeanAction,BeanAction 根据请求路径或struts-config.xml中action元素中parameter属性指定的方法名,利用java反射调用bean中的业务处理方法,哪么如何找到bean?。


2.bean 继承自 BaseBean ,BaseBean 继承自 struts 中的ValidatorActionForm类,BaseBean 对 ValidatorActionForm 中的 reset()和validate()方法进行的重写,生成无参数的 reset()和validate()方法由子类重载,减少子类对struts的依赖。这里的无参数 reset()以及bean中的业务处理方法如何获得 HttpServletRequest等参数哪?


3.ActionContext类, BeanAction类利用java.lang.ThreadLocal类将参数绑定到请求的线程中.ActionContext对这些操作进行了封装,在bean中可以通过ActionContext的静态方法获取请求参数。


在demo的struts-config.xml文件中
 <action path="/shop/switchSearchListPage" type="org.apache.struts.beanaction.BeanAction"
            name="catalogBean" scope="session" parameter="switchProductListPage"
            validate="false">
      <forward name="success" path="/catalog/SearchProducts.jsp"/>
    </action>

    <action path="/shop/viewCategory" type="org.apache.struts.beanaction.BeanAction"
            name="catalogBean" scope="session"
            validate="false">
      <forward name="success" path="/catalog/Category.jsp"/>
    </action>

BeanAction类
public class BeanAction extends Action {
  private static final String NO_METHOD_CALL = "*";
  private static final String SUCCESS_FORWARD = "success";

  public final ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    String forward = SUCCESS_FORWARD;
    try {
      if (!(form instanceof BaseBean)) {
        if (form != null) {
          throw new BeanActionException("The form for mapping '" + mapping.getPath() + "' named '" + mapping.getName() + "' was not an instance of BaseBean.  BeanAction requires an BaseBean instance.");
        } else {
          throw new BeanActionException("The form for mapping '" + mapping.getPath() + "' named '" + mapping.getName() + "' was null.  BeanAction requires an BaseBean instance.");
        }
      }
      BaseBean bean = (BaseBean) form;
      ActionContext.initCurrentContext(request, response);
      if (bean != null) {
        // Explicit Method Mapping

        Method method = null;
        String methodName = mapping.getParameter();
        if (methodName != null && !NO_METHOD_CALL.equals(methodName)) {
          try {
            method = bean.getClass().getMethod(methodName, null);
            synchronized (bean) {
              forward = bean.getInterceptor().intercept(new ActionInvoker(bean, method));
            }
          } catch (Exception e) {
            throw new BeanActionException("Error dispatching bean action via method parameter ('" + methodName + "').  Cause: " + e, e);
          }
        }



        // Path Based Method Mapping

        if (method == null && !NO_METHOD_CALL.equals(methodName)) {
          methodName = mapping.getPath();
          if (methodName.length() > 1) {
            int slash = methodName.lastIndexOf("/") + 1;
            methodName = methodName.substring(slash);
            if (methodName.length() > 0) {
              try {
                method = bean.getClass().getMethod(methodName, null);
                synchronized (bean) {
                  forward = bean.getInterceptor().intercept(new ActionInvoker(bean, method));
                }
              } catch (Exception e) {
                throw new BeanActionException("Error dispatching bean action via URL pattern ('" + methodName + "').  Cause: " + e, e);
              }
            }
          }
        }
      }
    } catch (Exception e) {
      forward = "error";
      request.setAttribute("BeanActionException", e);
    }
    return mapping.findForward(forward);
  }
}


ActionContext 类
public class ActionContext {
  private static final ThreadLocal localContext = new ThreadLocal();
  private HttpServletRequest request;
  private HttpServletResponse response;
  private Map cookieMap;
  private Map parameterMap;
  private Map requestMap;
  private Map sessionMap;
  private Map applicationMap;

  public ActionContext() {
    cookieMap = new HashMap();
    parameterMap = new HashMap();
    requestMap = new HashMap();
    sessionMap = new HashMap();
    applicationMap = new HashMap();
  }

  static void initCurrentContext(HttpServletRequest request, HttpServletResponse response) {
    ActionContext ctx = getActionContext();
    ctx.request = request;
    ctx.response = response;
    ctx.cookieMap = null;
    ctx.parameterMap = null;
    ctx.requestMap = null;
    ctx.sessionMap = null;
    ctx.applicationMap = null;
  }

  public Map getCookieMap() {
    if (cookieMap == null) {
      cookieMap = new CookieMap(request);
    }
    return cookieMap;
  }

 ·············

  public HttpServletRequest getRequest() {
    return request;
  }

  public HttpServletResponse getResponse() {
    return response;
  }

  public static ActionContext getActionContext() {
    ActionContext ctx = (ActionContext) localContext.get();
    if (ctx == null) {
      ctx = new ActionContext();
      localContext.set(ctx);
    }
    return ctx;
  }
}

BaseBean 类
public final void reset(ActionMapping mapping, ServletRequest request) {
    ActionContext.initCurrentContext((HttpServletRequest) request, null);
    reset();
  }

URLhttp://ibatis.apache.org/javadownloads.cgi
2
0
分享到:
评论

相关推荐

    iBATIS_JPetStore-4.0.5

    iBATIS_JPetStore-4.0.5 是一个基于Java的开源示例项目,它展示了如何使用iBATIS框架来构建一个完整的电子商务应用程序。iBATIS是一个数据映射框架,它简化了Java应用程序与数据库之间的交互,允许将SQL查询直接嵌入...

    Ibatis+Spring+struts1框架搭建

    Ibatis是一个优秀的持久层框架,Spring是一个全面的后端应用框架,而Struts1则是一个经典的MVC(Model-View-Controller)架构框架。这三者结合可以构建出稳定且功能丰富的Web应用程序。 首先,让我们深入了解一下这...

    ibatisDemo 入门源码

    《IbatisDemo入门源码详解》 IbatisDemo是一个典型的基于Ibatis框架的入门示例,它为我们展示了如何在Java项目中使用Ibatis进行数据库操作。Ibatis,一个优秀的持久层框架,它允许开发者将SQL语句直接写在配置文件...

    struts2+spring+Ibatis框架包

    Struts2、Spring和iBatis是Java Web开发中三个非常重要的开源框架,它们共同构建了一个灵活、可扩展且高效的应用程序开发环境。这个“struts2+spring+iBatis框架包”集成了这三个框架,使得开发者能够快速构建基于...

    iBatis-JPetStore-5.0

    iBatis是一个优秀的Java持久层框架,它将SQL语句与Java代码分离,提供了一种灵活的方式来处理数据库操作。在本教程中,我们将通过“iBatis-JPetStore-5.0”项目来深入理解iBatis的核心概念和功能。 **1. iBatis概述...

    JPetStore (Struts + Spring + Hibernate)版

    综上所述,JPetStore (Struts + Spring + Hibernate)版是一个理想的学习资源,它展示了如何在实际项目中集成和使用这些流行的技术,对于Java Web开发人员来说,深入研究这个项目可以提升他们对现代企业级应用开发的...

    iBATIS JPetStore

    iBATIS JPetStore是一个经典的开源项目,它用于展示iBATIS框架在实际应用中的使用。iBATIS是一个数据持久层框架,它简化了Java应用程序与数据库之间的交互,避免了直接编写大量的SQL语句。JPetStore是基于iBATIS实现...

    iBATIS_Spring_struts_demo.rar_DEMO_Struct spring ibatis_ibatis j

    总结起来,这个DEMO项目展示了如何在Java Web环境中整合iBATIS、Spring和Struts,通过这三个框架的协作,实现一个高效、灵活且易于维护的应用程序。对于想要学习和掌握这些技术的开发者来说,这是一个非常有价值的...

    ibatis demo,ibatis例子,ibatis示例

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,...实践是检验真理的唯一标准,所以亲自动手尝试这个ibatis demo,会让你对Ibatis的理解更加深入。

    struts+spring+ibatis的Demo

    这个"struts+spring+ibatis的Demo"压缩包文件提供了这三个框架集成使用的示例代码,旨在帮助开发者理解和学习如何将它们有效地结合在一起。 **Struts 2框架** Struts 2是一个基于MVC设计模式的Web应用框架,它继承...

    ibatisDemo.zip

    在这个"ibatisDemo.zip"压缩包中,我们可能找到了一系列关于快速入门Ibatis的资源,包括实际的增删改查(CRUD)示例和配套的讲解视频。这对于我们理解和学习Ibatis非常有帮助。 首先,让我们深入了解一下Ibatis的...

    spring+ibatis的jpetstore实例工程,包含完整源代码和jar包

    总结,Spring+iBatis的JPetStore实例工程是一个生动的教学案例,它展示了如何利用这两个框架构建一个完整的Web应用。通过学习这个实例,开发者不仅可以深入了解Spring和iBatis的用法,还能掌握MVC架构、事务管理等...

    struts1+ibatis+Spring demo

    这个"struts1+ibatis+Spring demo"是一个示例项目,展示了如何将这三个框架集成到一起,实现一个完整的Web应用。 Struts1是Apache组织开发的一个开源MVC框架,它主要负责控制应用程序的流程,通过Action类处理用户...

    ibatis+spring+struts2 整合开发例子

    Spring还提供了对数据访问、事务管理、Web应用的支持,使得Ibatis可以作为其数据访问层的一个组件进行整合。 Struts2则是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它负责处理用户的请求,转发...

    struts2+spring+ibatis学生管理demo

    Struts2+Spring+Ibatis学生管理Demo是一个典型的Java Web应用程序,它展示了如何将三个流行的开源框架——Struts2、Spring和Ibatis有效地集成在一起,用于构建高效且可维护的学生信息管理系统。在这个系统中,Struts...

    jpetstore4.0 (spring+struts+ibatis)

    jpetstore4.0是一款经典的电子商务示例应用,它采用Spring、Struts和iBatis这三个核心框架构建,展示了如何在Java环境下实现一个完整的MVC(Model-View-Controller)架构。这个项目是针对JDK7及更高版本,以及Tomcat...

    STRUTS2+SPRING+IBATIS搭建的Demo实例

    Struts2、Spring和iBatis是Java Web开发中非常重要的三个框架,它们共同构建了一个典型的MVC(Model-View-Controller...通过对这个Demo的深入研究和实践,开发者可以提升自己的技能,更好地应对复杂的Web应用开发挑战。

    IbatisDemo01

    【IbatisDemo01】是基于.NET平台的一个完整的IbatisNet框架的应用示例,它包含了对数据库进行增、删、改、查(CRUD)的基本操作。IbatisNet是一款轻量级的ORM(对象关系映射)框架,它允许开发者将SQL语句与.NET代码...

    ibatisDemo.rar

    IbatisDemo是一个展示如何利用Ibatis框架实现数据库半自动化操作的实例,相较于Hibernate,Ibatis提供了更高的灵活性,这也是它在电信、淘宝等大型企业中被广泛采用的原因。本篇文章将深入探讨Ibatis的核心概念、...

    ibatis+spring+struts

    在IT行业中,集成框架是构建复杂企业级应用的常用手段,而"Ibatis+Spring+Struts"就是一个经典的Java Web开发组合,也被称作SSM框架。这个框架集合了Struts的MVC设计模式、Spring的依赖注入和事务管理以及Ibatis的...

Global site tag (gtag.js) - Google Analytics