`
maping
  • 浏览: 40940 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2和Struts1.x的比较

    博客分类:
  • Java
阅读更多

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相对于Struts1.x在多个方面进行了改进和优化,包括但不限于Action的实现方式、工作流程、数据绑定、视图技术以及验证机制,这些改进共同构成了Struts2.x相较于Struts1.x的优势,使其成为现代Web...

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

    总的来说,Struts2.x相对于Struts1.x在很多方面进行了改进,提供了更好的可扩展性、灵活性和代码组织结构。对于初学者来说,理解这些差异有助于更好地选择和适应不同的开发需求。通过实际项目中的学习和实践,可以更...

    struts2.x jar

    1. **Struts2核心库**:`struts2-core.jar`是框架的基础,包含了Action、Interceptor、Result等核心概念的实现,以及Struts标签库和配置解析器。 2. **插件库**:如`struts2-convention-plugin.jar`用于自动配置...

    Ext2.1 struts1.x spring 2.x hibernate 2.x

    【标题】"Ext2.1 struts1.x spring 2.x hibernate 2.x" 涉及的技术栈是Web开发中的经典组合,主要包括EXT JS的2.1版本、Struts1.x、Spring 2.x以及Hibernate 2.x。这些技术在过去的Web应用程序开发中扮演着重要角色...

    Struts1.x_Project.zip

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

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

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

    struts1.x技术课程讲解.pdf

    - **学习前提**:为了更好地理解和运用 Struts1.x,学员需要具备一定的技术基础,包括但不限于 JSP/Servlet 的知识、Java 基础、数据库管理和 JDBC 相关技术等。 #### 二、Struts1.x 的工作原理与架构 1. **MVC ...

    Struts2和Struts1.x的全面比较

    下面将对Struts2和Struts1.x进行全面比较,探讨它们的主要差异和改进。 1. **设计模式**: - **Struts1.x**:基于Front Controller模式,只有一个ActionServlet处理所有的请求。 - **Struts2**:采用拦截器...

    Struts2.X+Hibernate3.X+Spring2.5 整合

    标题"Struts2.X+Hibernate3.X+Spring2.5 整合"指的是将这三个框架的特定版本(Struts2.X,Hibernate3.X,Spring2.5)集成到同一个项目中,实现高效的企业级应用开发。这种整合能够充分利用各个框架的优势,使开发者...

    Struts1.x Spring2.x Hibernate3.x DWR2.x整合工具文档v1.00

    ### Struts1.x、Spring2.x、Hibernate3.x 和 DWR2.x 整合知识点解析 #### 一、Struts1.x与Spring2.x的整合 **1.1 在web.xml中进行Struts和Spring的配置** 为了实现Struts1.x与Spring2.x的无缝集成,首先需要在...

    struts2.ppt struts2.ppt 我们老师发的PPT

    1. struts2-core-2.x.x.jar:这是Struts2框架的核心库。 2. xwork-2.x.x.jar:XWork库是Struts2的基础。 3. ognl-2.x.x.jar:对象图导航语言,Struts2使用它作为表达式语言。 4. freemarker-2.3.x.jar:FreeMarker是...

    struts2-core-2.3.31.jar

     Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架,主要提供两个版本框架产品:Struts 1和Struts 2。  Apache Struts 2.3.5 - 2.3.31版本...

    Struts2与Struts1.x的深度比较

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

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

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

    struts的总结(struts1.x)

    本文对 Struts 1.x 的核心概念和技术进行了详细介绍,包括配置文件解析、ActionForm 和 DynaActionForm 的使用、数据转换以及表单验证等方面。希望这些内容能帮助读者更好地理解和掌握 Struts 1.x 框架的使用方法。

    struts-2.5.16升级jar包.zip

    1. **struts2-core.jar**:这是Struts 2框架的核心,包含Action和Result的实现,以及核心的拦截器链。 2. **struts2-convention-plugin.jar**:提供了自动配置Action和Action方法的能力,基于类和方法的命名规则。 3...

    struts in action (struts1.x)

    `Struts 1.x` 是 Apache 软件基金会(ASF)下的一个开源项目,是 Java Servlet 和 JavaServer Pages(JSP)平台上的一个MVC(Model-View-Controller)框架,主要用于构建企业级Web应用程序。这个框架在2002年发布,...

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

    本系列教程是针对初学者的全面指导,旨在帮助学习者快速掌握Struts1.x的核心概念和使用方法。下面我们将深入探讨Struts1.x的关键知识点。 1. **MVC架构**:MVC是一种设计模式,用于分离应用程序的数据、业务逻辑和...

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

    1. **安装和配置**:了解如何在项目中集成Struts1.x框架,配置web.xml和struts-config.xml文件。 2. **Action和ActionForm**:深入理解这两者的作用,如何编写和使用它们。 3. **视图渲染**:熟悉JSP页面和Struts...

Global site tag (gtag.js) - Google Analytics