原文地址:http://www.zhihu.com/question/19610608
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:雪莹
链接:http://www.zhihu.com/question/19610608/answer/12373850
来源:知乎
二者的区别 1.struts1要求Action继承一个抽象基类,但struts2可以不继承任何类,甚至也可以不实现接口。 2.struts1是单例模式,struts2为每一个请求创建一个action的实例。 3.struts1依赖于servlet api,但struts2 不依赖api.因为struts2有拦截器的机制。 4.struts1的actionform必须继承一个ActionForm的基类,struts2的选择很多,就算使用模型驱动,也不需要继续某些类。 5.struts1整合了jstl,struts2也可以使用jstl,但还可以使用OGNL表达式语言。 6.struts1的actionform通常都是String类型,但struts2可以轻松支持类型转换。详细道来:Apache Struts 2即是之前大家所熟知的WebWork 2。在经历了几年的各自发展后,WebWork和Struts社区决定合二为一,也即是Struts 2 Action 类: Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。 Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。 线程模式: Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题) Servlet 依赖: Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。 Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。 可测性: 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。 Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。 捕获输入: Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。 Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。 表达式语言: Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。 Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL). 绑定值到页面(view): Struts 1使用标准JSP机制把对象绑定到页面中来访问。 Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。 类型转换: Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。 Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。 校验: Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。 Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性 Action执行的控制: Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。 Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。 Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到用广泛的应用。作为最成功的Web框架,Struts自然拥有众多的优点。
分享到:
相关推荐
本教程将深入探讨Struts1.0和Struts2.0两个版本的主要概念、设计模式以及它们在实际开发中的应用。 Struts1.0: Struts1.0是最早的版本,它引入了Model-View-Controller(MVC)架构,帮助开发者更好地组织和分离...
在本篇章实例中,我们将探讨Struts 1.0和2.0两个版本,了解它们的核心概念、优缺点以及如何在实际项目中应用。 首先,让我们来看看Struts 1.0。它于2001年发布,是最早的Java Web MVC框架之一。Struts 1.0的核心...
`i18n_struts1.0.rar`和`i18n_struts2.0.zip`这两个压缩包可能包含了示例项目,用于演示如何在Struts1.0和Struts2.0中实现国际化。解压后,开发者可以查看其中的配置文件、资源属性文件以及JSP页面,以了解具体的...
4. **配置方式**: Struts 2.0支持XML和注解两种配置方式。XML配置文件(通常为struts.xml或struts-default.xml)用于定义Action、拦截器、结果类型等,而注解配置则可以直接在Action类和方法上标注,简化了配置工作...
Struts 2.0 是一个基于 Model-View-Controller (MVC) 设计模式的Java Web应用程序框架。它并非Struts 1的直接升级,而是源自WebWork框架,提供了更强大的特性和灵活性。Struts 2的核心是Action,它是业务逻辑处理的...
本系统是一个实用的学习案例,可以帮助开发者深入理解JSP、Struts2.0和MySQL在实际项目中的运用,同时,也可以作为初学者练习Web开发技能的平台。通过学习和实践这个系统,可以提升在企业级Web应用开发中的综合能力...
这个"Struts2.0视频教程+struts2.0中文教程"包含的资源旨在帮助学习者深入理解和掌握Struts2.0的核心概念和实际应用。 首先,"struts2.0入门.rar"可能包含了基础的教程内容,涵盖了以下几个关键知识点: 1. **...
### Struts 2.0 详细配置解析 #### 一、Struts 2.0 简介 Struts 2.0 是一个基于 Java 的开源框架,用于开发 Web 应用程序。它继承了 Struts 1.x 的优点,并在架构上进行了改进,更加灵活且易于扩展。Struts 2.0 ...
Struts2.0 jar包是Java Web开发中的一个重要组件,它是Apache Struts框架的一个特定版本。Struts2是一个基于MVC(Model-View-Controller)设计模式的开源框架,用于构建可维护性高、结构清晰的Java应用。该框架极大...
这个"Struts2.0学习系列"旨在帮助初学者及进阶者深入理解并掌握Struts2.0的核心概念和技术。 在Struts2.0的学习过程中,首先需要了解的是其基本架构。Struts2.0框架整合了多种开源项目,如FreeMarker或JSP作为视图...
API文档是理解任何框架核心功能的关键,对于Struts2.0也不例外。让我们深入探讨Struts2.0 API的核心概念、关键组件以及它们在实际开发中的应用。 首先,`Struts2.0中文教程.chm`可能包含对框架的详细解释,包括...
MVC模式是一种软件设计模式,将应用分为三个部分:模型(Model)、视图(View)和控制器(Controller)。Struts2中的Action类对应Controller,负责接收请求、处理业务逻辑;视图通常由JSP页面实现,显示数据;模型...
这两本书籍分别涵盖了Struts1.x和Struts2.0的基础知识、高级特性和最佳实践。《Struts2.0中文帮助手册.chm》将详细介绍Struts2的API、配置和使用技巧,而《Struts1.2.pdf》则可能包含了Struts1.x的框架原理、开发...
Struts2.0是Java Web开发中一个非常重要的框架,它是Apache软件基金会的Jakarta项目下的一个开源产品,主要用于构建MVC(Model-View-Controller)模式的应用程序。本入门案例将带你逐步了解如何使用Struts2.0来创建...
Struts2.0是Java Web开发中的一个强大框架,它极大地简化了MVC(Model-View-Controller)架构的实现。在JSP中,Struts2.0提供了一套丰富的标签库,使得开发者可以更加方便地处理视图层的逻辑,提高代码的可读性和可...
Struts2的配置分为XML配置和注解配置两种。XML配置通常在`struts.xml`文件中定义Action、ActionMapping和结果类型。注解配置允许在Action类上直接声明,更加灵活。 **4. OGNL(Object-Graph Navigation Language)*...
Struts1.0是一个经典的Java Web开发框架,由Apache软件基金会维护,主要用于构建基于MVC(Model-View-Controller)模式的应用程序。本教程将深入探讨如何实现一个简单的Struts1.0应用。 首先,我们需要了解Struts...
首先,`struts-2.0.dtd`是Struts 2.0的文档类型定义,它是XML文件的一种规范,用于验证`struts.xml`配置文件的语法是否正确。DTD中定义了配置元素和属性,如action、result、package等,确保开发者在编写配置文件时...