`
volunteer521
  • 浏览: 205711 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【转】Struts1.x与Struts2的比较

阅读更多

Action 类 
Struts1.x要求 Action类要扩展自一个抽象基类。 Struts1.x的一个共有的问题是面向抽象类编程而不是面向接口编程。 
Struts2的Action类实现了一个Action接口,连同其他接口一起来实现可选择和自定义的服务。Struts2提供一个名叫ActionSupport 的基类来实现一般使用的接口。 当然, Action接口不是必须的。 任何使用execute方法的POJO对象可以被当作Struts 2的Action对象来使用。 
 
线程模型 
Struts1.x Action类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。 
Struts2 Action对象为每一个请求都实例化对象,所以没有线程安全的问题。 (实践中,servlet容器给每一个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题) 。 
 
Servlet 依赖 
Struts1.x 的 Action 类依赖于 Servlet API ,当 Action 被调用时,以 HttpServletRequest 和HttpServletResponse作为参数传给execute方法。 
Struts2 的 Action 和容器无关。Servlet 上下文被表现为简单的 Maps,允许 Action 被独立的测试。Struts2的 Action 可以访问最初的请求(如果需要的话)。但是,尽可能避免或排除其他元素直接访问HttpServletRequest 或HttpServletResponse。 
 
易测性 
测试Struts1.x的主要问题是execute方法暴露了Servlet API这使得测试要依赖于容器) 。第三方的扩展,如Struts TestCase,提供了一套Struts1的模拟对象(来进行测试) 。 
Struts2的Action可以通过初始化、设置属性、调用方法来测试。依赖注入的支持也是测试变得更简单。
 
捕获输入 
Struts1.x使用 ActionForm对象来捕获输入。象Action一样,所有的ActionForm必须扩展基类。因为其他的JavaBean 不能作为 ActionForm 使用,开发者经常创建多余的类来捕获输入。DynaBeans 可以被用来作为替代 ActionForm 的类来创建。但是,开发者可能是在重新描述(创建)已经存在的 JavaBean(仍然会导致有冗余的javabean) 。 
Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm 模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib 对POJO输入对象的引用。 
 
表达式语言 
Struts1.x整合 JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是对集合和索引属性的支持很弱。 
Struts2 使用 JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL)。 
 
将值绑定到页面 
Struts1.x使用标准JSP机制来绑定对象到页面上下文。 
Struts2 使用“ValueStack”技术,使 taglib 能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view) 。 
 
类型转换 
Struts1.x的ActionForm属性经常都是String。Struts 1.x使用Commons-Beanutils来进行类型转换。转换每一个类,而不是为每一个实例配置。 
Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。 
 
验证 
Struts1.x支持在 ActionForm 的 validate 方法中手动校验,或者通过 Commons Validator 的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。 
Struts2 支持通过 validate 方法和 XWork 校验框架来进行校验。XWork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性 
 
Action 执行控制 
Struts1.x支持每一个模块有单独的Request Processors(生命周期) ,但是模块中的所有Action必须共享相同的生命周期。 
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。

分享到:
评论

相关推荐

    对struts1.x与struts2.x的区别的总结

    - **Struts2.x** 配置文件较少,主要为struts.xml,支持注解配置,减少XML配置的繁琐。 8. **插件与扩展性**: - **Struts1.x** 插件较少,扩展性相对较弱。 - **Struts2.x** 有丰富的插件系统,如Ajax、...

    struts1.x和struts2.x区别

    ### Struts1.x与Struts2.x的主要区别 在深入探讨Struts1.x与Struts2.x的区别之前,我们先来了解一下这两个框架的基本背景。Apache Struts是用于构建企业级Web应用程序的开源框架,它提供了MVC(模型-视图-控制器)...

    Struts1.x常用的开发包,需要学习struts1.x朋友可以下载

    虽然现在Struts1.x已经被Struts2等更新的框架所取代,但它的基础思想和设计模式仍然是Java Web开发中的重要参考。对于想要了解Web开发历史或深入理解MVC框架的开发者来说,学习Struts1.x仍然具有一定的价值。

    struts1.x技术课程讲解.pdf

    #### 二、Struts1.x 的工作原理与架构 1. **MVC 设计模式**:Struts1.x 采用了 MVC 架构模式,将应用程序划分为三个主要组成部分:模型(Model)、视图(View) 和控制器(Controller)。 - **模型(Model)**:处理数据和...

    Struts1.x系列教程(网摘-全)

    11. **Tiles框架集成**:Struts1.x可与Tiles框架结合使用,实现页面布局和组件重用,提高开发效率。 12. **Session和Application作用域**:Struts1.x通过ActionContext访问session和application作用域,方便数据...

    java Struts 1.x 框架 Web 开发

    然而,随着时间的推移,Struts 1.x 因为其局限性和安全问题,逐渐被Struts 2 和其他现代框架如Spring MVC、Play Framework等取代。尽管如此,了解 Struts 1.x 的基础知识对于理解Java Web开发的历史和演变仍然非常有...

    struts1.x apps 所有最新的Struts1.x项目应用

    Struts1.x是一款经典的Java Web框架,由Apache软件基金会开发并维护。它是MVC(Model-View-Controller)设计模式的实现,极大地简化了Java Web应用程序的开发过程。本资源集合包含了所有最新的Struts1.x项目应用,为...

    struts1.x 最简洁国际化 源代码

    Struts1.x是一个经典的Java Web框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在国际化(i18n)方面,Struts1提供了强大的支持,使得应用程序可以适应不同语言和地区的用户需求。以下是关于Struts1.x国际化...

    Struts1.x_Project.zip

    Struts1.x是一个经典的Java Web开发框架,它遵循Model-View-Controller(MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用程序。在这个"Struts1.x_Project.zip"压缩包中,我们可以看到一个使用Struts1.x...

    struts1.x入门教程

    【Struts1.x入门教程】 Struts1.x是Apache Jakarta项目的一个重要组成部分,它是一个用于构建企业级Web应用程序的开源MVC框架。该框架的主要目标是简化JavaServer Pages(JSP)、Servlet和标签库的使用,同时提升...

    Struts1.x的登录示例

    Struts1.x是一个经典的Java Web框架,它在20世纪末至21世纪初被广泛使用,用于构建基于MVC(Model-View-Controller)架构的Web应用。本示例将探讨如何使用Struts1.x实现一个简单的登录功能。首先,我们需要理解...

    Struts 2.x权威指南(第3版)

    Struts 2.x权威指南(第3版)

    魔乐科技Struts2.x框架笔记

    **Struts2.x与Struts1.x对比**:相较于Struts1.x,Struts2.x具有更多的优势,如不再强制要求ActionForm,配置文件更简洁,处理流程更加清晰。具体而言,请求首先被过滤器捕获,然后根据`struts.xml`文件的配置调用...

    搭建struts1.x的jar包

    首先,我们来看核心的`struts.jar`文件。这是Struts框架的核心库,包含了所有必要的类和接口,用于处理HTTP请求,管理Action类,以及实现MVC模式。它包含了ActionForm、Action、Dispatcher等关键组件,这些组件协同...

    freemarker for struts 1.x

    freemarker与struts 1.x 结合,生成html 在http://blog.csdn.net/chen1255 的web中有详细描述关于freemarker与struts1.x的结合

    struts1.x 和 struts2.x向Action里填充jsp参数原理

    本篇文章将深入探讨Struts1.x和Struts2.x在向Action中填充JSP参数的原理。 Struts1.x的工作原理: Struts1的核心是ActionServlet,它是一个实现了Servlet接口的控制器。当用户发起HTTP请求时,请求会被Dispatcher...

    Struts1.x入门与提高系列教程.pdf

    同时,教程中也会涉及与Struts 2.x的比较,帮助开发者理解两个版本之间的相似之处和差异。 ### Struts 1.x 入门基础 1. **Struts 1.x 概述**: - Struts 1.x 是一个成熟的MVC框架,它将Servlet API封装,提供了一...

    struts1.x多文件上传

    Struts1.x是一个非常经典的Java Web开发框架,它在过去的许多年里被广泛使用。文件上传功能是Web应用中常见的需求之一,特别是在处理用户需要提交多个文件的场景下。Struts1.x提供了处理多文件上传的功能,使得...

    Struts2与Struts1.x的深度比较

    Struts2和Struts1.x都是Java Web开发中流行的MVC框架,它们分别代表了不同阶段的Web开发理念。在本文中,我们将深入探讨这两者之间的差异,以便开发者能够更好地理解它们各自的优缺点,以及为什么Struts2被视为...

Global site tag (gtag.js) - Google Analytics