`
jonsamwang
  • 浏览: 36952 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts2与struts1有哪些改进和不同点

阅读更多

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

分享到:
评论

相关推荐

    Struts2和Struts1的区别,详细点,主要说说Struts2

    ### Struts2与Struts1的主要区别 #### Struts2架构设计与实现方式 - **Struts2**在设计上采用了更加灵活的方式,每个请求都对应一个实例化的Action对象,而不是像**Struts1**那样在整个请求周期内共享同一个Action...

    struts1和struts2的jar包

    Struts1和Struts2是两个不同的版本,它们各自拥有独特的特性和功能,但在Java Web开发领域都扮演了重要角色。 **Struts1** Struts1是最早的版本,它在2001年发布,是基于ApacheJakarta项目的一个框架。Struts1的...

    不同版本的 struts2.dtd

    下面我们将详细探讨不同版本的Struts2 DTD及其相关知识点。 1. **Struts2 DTD 的作用** - Struts2 DTD 是XML文档类型定义,它规定了struts2配置文件(如struts.xml或struts-default.xml)的语法和元素。这些元素...

    Struts1和Struts2的区别和对比.txt

    ### Struts1与Struts2的区别与对比 #### 概述 Struts1与Struts2是基于Java的两种流行的Web应用框架,它们都遵循MVC(Model-View-Controller)设计模式,用于构建结构化的Web应用程序。Struts1是早期版本,在2000...

    struts1与struct2的不同

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

    struts2的各种jar包

    Struts2是一个强大的Java web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用程序。它在Java社区中广泛使用,因...理解并熟练掌握这些知识点,将有助于你高效地开发和维护基于Struts2的Java web应用。

    程序员必看的书籍Struts1和Struts2的区别

    - **Action类**:与Struts1不同,Struts2允许Action类实现特定接口或者直接使用注解,这大大提高了灵活性。这种方式支持面向接口编程,更符合现代软件工程的原则。 - **配置方式**:Struts2支持多种配置方式,包括...

    struts2所用到的jar包

    8. **国际化与本地化**:Struts2提供对多语言的支持,通过资源包(.properties文件)来管理不同语言的文本,以实现应用的国际化和本地化。 9. **Ajax支持**:Struts2有内置的Ajax支持,可以与Dojo、jQuery等库配合...

    struts2讲义 struts2讲义struts2讲义struts2讲义struts2讲义

    ### Struts2讲义知识点概览 #### 一、Struts2的历史与发展 - **Struts框架的发展历程**: - Struts最初版本发布于2000年...通过对Struts2核心概念和技术的理解,开发者可以更好地利用这个框架来满足不同项目的需求。

    传智的struts2

    它的出现是为了改进Struts1框架的一些局限性,提供更强大的功能和更好的性能。Struts2的核心是Action,它负责接收请求、调用业务逻辑并返回结果到视图。在Struts2中,配置文件通常为struts.xml,用于定义Action、...

    Struts2框架及注释和用法

    Struts2的核心是Action类,它是处理用户请求的入口点。每个Action对应一个业务逻辑,当用户发起请求时,Struts2会根据配置文件(如struts.xml)来决定哪个Action应该处理该请求。Action执行完毕后,会返回一个结果,...

    15年9月传智播客视频struts2

    它是Struts1的升级版,不仅继承了Struts1的优点,还在其基础上进行了大量的改进和增强。Struts2框架的主要特点包括但不限于: 1. **灵活性高**:Struts2提供了丰富的拦截器机制,可以根据实际需求灵活地配置不同的...

    spring与struts2整合

    1. **引入依赖**:在项目中添加 Spring 和 Struts2 相关的库,通常通过 Maven 或 Gradle 进行管理。 2. **配置 Spring**:创建 Spring 配置文件(如 `spring-context.xml`),定义 Bean 定义并管理应用程序的依赖。...

    Struts2框架 jar JAVA开发 Struts2.jar架包 Struts2开发实例

    它基于Apache软件基金会的Jakarta Struts项目,旨在提供比其前身Struts1更为灵活和功能丰富的开发环境。 **Struts2概述** Struts2的核心设计目标是简化MVC应用的开发,通过提供一系列的插件和拦截器,使得开发者...

    Struts2 与Freemarker 的配置方法

    以下是关于Struts2与Freemarker配置的详细步骤和相关知识点: 1. **Freemarker简介**: - Freemarker 是一个基于模板的语言,主要用于生成HTML或其他格式的文本输出。它的核心是模板文件,开发者可以使用...

    struts2下载地址

    Struts2是一个开源的Web应用框架,它继承了Struts1的设计理念,并在此基础上进行了大量的改进和完善。Struts2是Apache软件基金会下的一个顶级项目,它采用MVC(Model-View-Controller)设计模式,将业务逻辑与展示层...

    struts 2完全学习手册

    Struts 2是Struts框架的一个重要分支,它继承了Struts 1.x的一些特性,并在此基础上进行了大幅度的改进与扩展,使之成为了一个更为强大、灵活的Web开发框架。Struts 2主要应用于Java EE平台上的Web应用开发,其核心...

    Struts2基础教程

    Struts2是在Webwork的基础上构建的,与它的前辈Struts1.x相比,虽然在大版本号上相同,但在配置和使用上有显著区别。 在开始之前,确保你有以下环境: 1. 开发工具:MyEclipse6 2. Web服务器:Tomcat6 3. Struts2...

    struts2的复习

    七、Struts2与Spring集成 10. 集成Spring:Struts2可以通过Struts2-Spring-plugin插件与Spring框架无缝集成,实现依赖注入,便于管理Action对象及其协作对象。 八、异常处理 11. 异常处理:Struts2提供了全局和局部...

Global site tag (gtag.js) - Google Analytics