`

收集来的Struts1.x和Struts2的异同

阅读更多
特性
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两者之间在Action方面的差别,Struts2加强了对拦截器与IoC的支持,而在Struts1.x中,这些特性是很难想象的。
同时,应该明白:Struts2是WebWork的升级,并且吸收了Struts 1.x 的部分优势优点,而不是Struts 1.x的升级。虽然Struts 2提供了与Struts1.x的兼容,但已经不是Struts1.x的升级。对于已有Struts1.x开发经验的开发者而言,Struts1.x的开发经验对于Struts2并没有太大的帮助;相反,对于已经有WebWork开发经验的开发者而言,WebWork的开发经验对Struts2的开发将有很好的借鉴意义。

两点注释:

 

1)POJO:简单的Java对象(Plain Old Java Objects)实际就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其Getter()和Setter()方法的类,有时可以作为Value Object或DTO(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有Connection之类的方法。

 

2)JSTL:JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由Apache的Jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如Tomcat 4.x。在JSP 2.0中也是作为标准支持的。

分享到:
评论

相关推荐

    struts1和struts2中文教程

    通过这两个教程,你可以了解到Struts1和Struts2在架构设计、核心组件、配置方式以及开发实践上的异同,理解它们如何帮助开发者构建高效、可维护的Java Web应用。阅读Struts1.pdf文档,将帮助你掌握Struts1的基础知识...

    JSF与Struts的异同.rar

    - **Action和ActionForm:**Struts通过Action类处理业务逻辑,ActionForm类用于收集和验证表单数据。 - **配置驱动:**Struts主要通过struts-config.xml配置文件来定义请求映射和视图跳转。 - **插件架构:**Struts...

    MVC模式JSF与Struts的异同.txt

    ### MVC模式下JSF与Struts的异同分析 #### 一、概述 MVC(Model-View-Controller)模式是一种广泛应用于软件工程中的设计模式,尤其在Web应用开发领域非常常见。它将应用程序分为三个核心组件:模型(Model)、视图...

    struts1与struct2的不同

    Struts1和Struts2是Java Web开发中两种流行的MVC框架,它们在设计和功能上有许多不同之处。以下是对这两个框架异同点的详细解释: 1. **Action类**: - **Struts1**:要求Action类继承一个抽象基类,如`Action`或`...

    webwork与struts处理上的异同(1) .txt

    ### WebWork与Struts处理上的异同分析 #### 一、引言 随着Web应用的发展,Java企业级应用框架在不断进化与完善之中。其中,Struts与WebWork是两个非常重要的MVC(Model-View-Controller)架构框架,它们在Java Web...

    struts、struts1.2 学习教程

    三、Struts1.2与Struts2的异同 1. **ActionServlet**:Struts1.2使用单一的ActionServlet处理所有请求,而Struts2引入了Front Controller模式,所有的请求都由StrutsPrepareAndExecuteFilter处理。 2. **表达式语言...

    Struts2与Struts1 API使用手册CHM格式

    Struts2和Struts1是两个非常著名的Java Web框架,由Apache软件基金会开发,用于构建MVC(模型-视图-控制器)架构的应用程序。这两个框架在Web开发中扮演着重要角色,帮助开发者组织和管理应用程序逻辑,提高代码的可...

    Struts与Struts2比较学习

    总的来说,Struts2是对Struts 1的一次重大升级,不仅提升了开发效率,还增强了框架的灵活性和可扩展性。然而,这并不意味着Struts 1已经过时,对于一些简单项目或者对性能有特殊要求的场景,Struts 1可能仍然是一个...

    个人spring&struts学习笔记

    通过阅读 spring_notebook.docx 和 struts2.x_selfStudy.docx 这两个文档,你可以深入理解 Spring 和 Struts2 的具体使用方法和最佳实践,为自己的 Java Web 开发技能树增添重要的一环。同时,结合实际项目练习,将...

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

    Struts 2是由Apache Software Foundation开发的一个项目,它继承了Struts 1和WebWork的优点,并在此基础上进行了大量的改进和优化,成为了一个功能更加强大、更加灵活的Web开发框架。 **1.3.1 Struts 2架构** ...

    电子书-精通Struts基于MVC的WEB设计与开发.rar

    尽管本书可能主要关注Struts1,但理解这两个版本的异同对于全面掌握MVC框架至关重要。 总之,《精通Struts:基于MVC的Web设计与开发》这本书将带你深入理解Struts框架的每一个角落,无论是初学者还是有经验的开发者...

    详细介绍JSF与Struts的异同

    详细介绍JSF与Struts的异同 详细介绍JSF与Struts的异同

    MyEclipse_Struts_Quickstart

    本教程旨在引导读者通过使用MyEclipse Enterprise Workbench来开发和测试一个简单的Struts示例应用。即便之前没有Struts或MyEclipse的经验也无妨。由于Struts框架与JSF(JavaServer Faces)在某些方面具有相似性,...

    struts学习资料

    1. **Model**:模型层是应用程序的核心部分,负责处理业务逻辑和数据管理。开发者通常会使用JavaBeans或POJO(Plain Old Java Objects)来实现模型对象。 2. **View**:视图层是用户与应用交互的界面。Struts支持...

    java面试题大全(struts+hibernate+uml+sql)

    2. Struts配置文件的理解,如struts-config.xml中action元素、form-beans元素和message-resources元素的使用。 3. Struts拦截器(Interceptor)的工作原理和自定义拦截器的实现。 4. 使用Tiles进行页面布局的优势和...

    struts in action

    1. **MVC模式**:Struts遵循MVC设计模式,将业务逻辑、数据模型和用户界面分离,使得代码更加清晰,易于维护。书中会详细介绍如何在Struts中配置和使用控制器、模型和视图组件。 2. **Action类与Form Beans**:...

    Spring+Hirbnate+Struts

    总结来说,Spring+Hibernate+Struts三框架的集成提供了强大的MVC架构支持和灵活的持久层解决方案,通过依赖注入和面向切面编程提高了代码的可维护性和复用性。在实际项目中,开发者需要熟悉每个框架的核心概念和配置...

Global site tag (gtag.js) - Google Analytics