`
bigtree2006
  • 浏览: 47077 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

struts2和struts1.x的深度比较

阅读更多

Struts2和Struts1.x的全面比较

为了对Struts2和Strtus1.x进行全面的比较,让读者了解这两种框架各自的优缺点,以便于在自己的项目中,根据实际情况,选择合适的框架,对它们两者进行比较,总结了如下表分析比较。

 

特性

 

 

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一起使用。

分享到:
评论

相关推荐

    Struts2与Struts1.x的深度比较

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

    Struts1_x与Struts2的深度比较

    Struts1_x与Struts2的深度比较

    百度文库 牛牧struts2.x深入浅出

    牛牧的"Struts2.x深入浅出"教程是针对这个框架的深度解析,主要帮助开发者理解并熟练掌握Struts2的核心概念和实践技巧。 在第二部分中,我们首先会接触到`struts2_GetFromData`,这部分主要讲解了如何从HTTP请求中...

    struts2+spring+hibernate+ajax纳税服务.rar

    Struts2、Spring和Hibernate是Java企业级开发中常用的三个框架,它们构成了SSH(Struts2、Spring、Hibernate)框架体系,广泛应用于构建MVC(Model-View-Controller)架构的Web应用程序。Ajax(Asynchronous ...

    struts-1.2.9-src.zip

    总之,深入研究“struts-1.2.9-src.zip”中的源代码,不仅可以提升对Struts框架的理解,还能提高Java Web开发技能,对于维护和升级老系统,或是对MVC架构有深度需求的开发者来说,都是非常有益的。

    strutus 大牛整理的知识点(1.x何2.x都有,很全面)

    以下是对Struts框架关键知识点的深度解析,涵盖Struts1.x的基础知识、配置过程、以及Struts标签的配置和使用。 ### Struts1.x基础知识 #### MVC模式 Struts1.x是基于MVC(Model-View-Controller)模式构建的,该...

    Struts.2权威指南--基于WebWork核心的MVC开发.0007.pdf

    相比于Struts 1.x,Struts.2具有更强大的功能和更高的灵活性,它支持多种语言(如Java、Groovy、Scala等),并且通过使用拦截器(Interceptor)机制,提供了更丰富的功能扩展性。此外,Struts.2还内置了对AJAX的支持...

    struts2源代码分析

    虽然名称上相似,但Struts2实际上是基于WebWork框架进行了深度优化和发展而来。这种发展不仅仅体现在技术层面,更重要的是整体架构和设计理念的变化。 #### 二、Struts2与WebWork的关系 - **Struts2的核心**:基于...

    struts各个版本jar包汇总

    - **Spring集成**:Struts 2可以与Spring框架深度整合,实现依赖注入和AOP。 - **Hibernate集成**:支持与ORM框架如Hibernate的配合,简化数据库操作。 - **Freemarker和Velocity**:除了JSP外,Struts 2还支持...

    最新版Hibernate-struts-spring框架整合.doc

    此外,Spring还提供AOP(面向切面编程)、数据访问、事务管理等功能,与Struts2和Hibernate深度集成,实现事务的统一管理和数据访问的解耦。 **整合关键点**: 1. **Struts2核心包**:`struts2-core-2.3.4.jar`...

    struts 学习资料 (pdf)

    Struts 的不同版本,如Struts1、Struts2和Struts3,分别代表了其发展历程中的关键阶段。 在“struts 学习资料 (pdf)”这个压缩包中,包含的三个PDF文件分别是struts1.pdf、struts3.pdf和Struts2.pdf,它们分别...

    spring-framework-3.2.x .zip----源码

    《Spring 框架 3.2.x 源码深度解析》 Spring 框架作为Java领域最广泛使用的轻量级框架之一,它的设计理念、实现方式以及内部机制一直是开发者们热衷研究的话题。本篇文章将围绕 Spring Framework 3.2.x 的源码进行...

    struts资料

    《深入理解Struts 1.1及应用开发实例解析》则可能提供有关Struts 1.x实际应用的深度分析。《Struts标记库.doc》将详细介绍Struts 1中的JSP标签,帮助你更好地利用视图层。阅读这些文档,将有助于你成为一位熟练的...

    struts menu 学习指南

    当从StrutsMenu 1.x迁移到2.X时,开发者需关注以下关键步骤: 1. **更新Taglib声明**:修改`<%@taglib uri="http://struts-menu.sf.net/tag" prefix="menu"%>`中的URI和前缀,以确保与新版本兼容。 2. **调整插件...

    《精通Spring 2.x-企业应用开发详解》chapter21.rar

    6. **Struts**:是基于MVC(模型-视图-控制器)设计模式的Java Web框架,Spring也提供了类似的MVC框架Spring MVC,两者常被比较和结合使用。 7. **Chapter 21**:虽然具体章节内容未详述,但通常会涉及一些高级主题...

    struts2.0的特点

    Struts2.0是Java Web开发领域中的一款流行框架,它是Struts1.x与WebWork框架的结合体,继承了两者的优点并进行了创新。在Struts2.0中,核心概念之一是Action,它被设计为一个简单的POJO(Plain Old Java Object),...

    Struts2.0+spring2.5+hibernate3.2

    1. **配置Struts2**: 配置struts2.xml文件,定义Action类、结果类型和全局配置。 2. **整合Spring**: 在Struts2的Action类中注入Spring管理的Bean,通过Spring的ApplicationContext获取服务对象。 3. **配置...

    《精通Spring 2.x-企业应用开发详解》18-19

    《精通Spring 2.x - 企业应用开发详解》是一本深度解析Spring框架2.x版本的专业书籍,涵盖了Spring在企业级应用中的核心技术和实践方法。在第18章和第19章中,作者深入探讨了Spring如何与相关技术如Hibernate、J2EE...

    《精通Spring 2.x-企业应用开发详解》chapter23.rar

    《精通Spring 2.x - 企业应用开发详解》是一本深度解析Spring框架2.x版本的专业书籍,本章节主要聚焦在Spring在企业级应用中的实际运用和技术细节。在Spring 2.x时代,它已经成为了Java EE(当时称为J2EE)开发的...

Global site tag (gtag.js) - Google Analytics