zoukankan      html  css  js  c++  java
  • Struts与Struts2的区别

    StrutsStruts2的区别

        首先看一张Struts2的发展路线图:

     

     

          从Struts2的发展过程来看,Struts2继承了Struts与Webwork的特性,形成了新的框架。但是它的称呼只是在“Struts”后面添加一个“2”,显然Struts2还是更多的继承了Struts的设计思想,并加入了WebWork的特点。下面将从十个方面来说明Struts与Struts2之间的不同点:

    (1)Action

         在Struts中都是使用抽象类编程而不是接口,因此它要求开发的Action类继承一个抽象基类,如DispatchAction等;

    Struts2则基于接口编程,我们的Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。更加强大的是,在Struts2中Action接口不是必需的,任何有execute()函数的POJO对象都可以用作Struts2的Action类来使用。

    (2)线程模式

          Struts的Action是单例模式并且是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了StrutsAction能做的事,并且要在开发时特别小心,Action资源必须是线程安全的或者同步的;

    Struts2的Action对象为每一个请求产生一个实例,因此没有线程安全的问题。

    (3)Servlet依赖

          Struts的Action依赖于ServletAPI,当一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给执行的方法;

          Struts2的Action不依赖于容器,运行Action脱离容器单独被测试。如果需要,Struts2的Action仍然可以访问初始的request和response。

    (4)可测试性

          测试StrutsAction的一个主要问题是,execute()方法暴露了ServletAPI,这使得测试要依赖于容器。

          Struts2Action的类是POJO类,因此可以直接编写测试类来进行测试,只需要在测试类中为Action注入属性即可。

    (5)捕获输入

          Struts使用ActionForm对象捕获用户输入,所有的ActionForm必须继承一个基类ActionForm。因为其他的JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态表单可以作为创建传统ActionForm的选择,但是,开发者可能是在重新创建已经存在的JavaBean,仍然会导致有冗余的JavaBean;

          Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己子属性的rich对象模型。Action属性能够通过Web页面上的taglibs访问。同时,Struts2也支持ActionForm模式。

    (6)表达式语言

          Struts整合了JSTL,这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱;

          Struts2可以使用JSTL,但是也支持一个更强大和灵活表达式语言OGNL。

    (7)绑定值到页面

          Struts使用标准JSP机制把对象绑定到页面中来访问;

          Struts2使用ValueStack(值堆栈)技术,使taglib能够访问值,而不需要把你的页面和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面。

    (8)类型转换

          Struts的ActionForm属性通常都是String类型,并使用Commons-Beanutils进行类型转换。每个类提供一个转换器,对每一个实例来说都是不可配置的;

          Struts2使用表达式语言OGNL进行类型转换,提供了基本和常用对象的转换器。

    (9)数据校验

          Struts支持在ActionForm的validate()方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象;

          Struts2支持通过validate()方法和XWork校验框架来进行校验,XWork校验框架使用属性类型定义的校验和内容校验,来支持chain校验子属性。

    (10)Action执行的控制

          Struts支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期;

          Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期,堆栈能够根据需要和不同的Action一起使用。

     

         总之,从实际开发的角度来说,Struts框架和Struts2框架的主要不同点在于Action类不同。

  • 相关阅读:
    Java中的equals方法和==的区别
    C语言学习笔记--单向链表Markdown版本
    Tamias Blog's
    nginx图片服务器
    Nginx安装解决报错
    Detour框架注入样本无法正常启动(0x000007b)
    结构体指针中包含结构体指针
    Linux开发准备:Ubuntu14.04+Samba+MobaXterm+Source Insight 4.0
    在Visual Studio中将dll以资源的形式嵌入exe中
    MACD的价值不在于“金叉死叉”而在于背离
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/5779375.html
Copyright © 2011-2022 走看看