`
jsczxy2
  • 浏览: 1273299 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

引用一下:struts1和struts2之间的区别

阅读更多

Struts2与Struts1的对比

来源:struts2开发组  翻译:tianxinet(胖猴)


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

分享到:
评论

相关推荐

    Struts1和Struts2的区别和对比

    Struts1和Struts2是两个非常著名的Java Web框架,它们都用于构建MVC(Model-View-Controller)架构的应用程序。尽管它们都是Struts家族的一部分,但它们在设计哲学和实现方式上存在显著差异。 首先,从Action类的...

    struts2测试案例

    6. **ValueStack**:ValueStack是Struts2中存储Action属性和请求参数的对象栈,使得在Action和JSP之间传递数据变得简单。 7. **Tiles框架集成**:Struts2可以与Tiles框架集成,方便地进行页面布局和组合。Tiles定义...

    Struts2权威指南完整版

    1. **Struts2框架概述**:首先,书中会介绍Struts2框架的基本概念,包括它的起源、发展和主要特点,以及与前一代Struts1的区别。 2. **安装与配置**:介绍如何在开发环境中安装Struts2框架,包括依赖库的添加、web....

    struts2 的showcase,可直接导入到myeclise

    5. **OGNL表达式语言**:OGNL(Object-Graph Navigation Language)是Struts2默认的表达式语言,用于在Action和JSP之间传递数据。Showcase展示了如何在Action中设置值,并在JSP中访问这些值。 6. **Action Mapping*...

    struts2教程我在培训时用的

    - **配置方式**:Struts2支持XML和注解两种配置方式,而Struts1主要通过XML配置。 - **拦截器机制**:Struts2具有更加强大的拦截器机制,能够更好地控制业务流程。 - **类型转换与验证**:Struts2提供了更加强大...

    Struts2核心包

    7. **表达式语言(OGNL,Object-Graph Navigation Language)**:OGNL是Struts2默认的表达式语言,用于在Action和视图之间传递数据。它可以在JSP中直接访问Action的属性,也可以在配置文件中使用。 8. **插件体系**...

    struts-2.3.1.2-all.zip Struts源码和帮助文档

    4. **表达式语言(Expression Language, EL)**:Struts 2支持使用OGNL(Object-Graph Navigation Language)作为默认的表达式语言,允许在视图层直接访问模型对象的属性,简化了视图和模型之间的数据绑定。...

    ognl 源码: struts2 所用的 ognl 包源码

    总的来说,Struts2 使用 OGNL 提供了一种强大且灵活的方式来处理视图和模型之间的数据交互。通过深入理解 OGNL 的源码,开发者可以更好地利用这一特性,同时避免潜在的安全风险。对于想要深入了解 Struts2 和 OGNL ...

    struts2 入门书籍

    - **Struts2的体系结构**:Struts2采用拦截器栈作为其核心机制,这使得框架更加灵活,易于扩展和维护。 - **Struts2配置文件**:主要使用XML格式,用于配置Action、拦截器、结果类型等。此外,Struts2还支持使用...

    ibatis+struts2

    5. **OGNL**:Object-Graph Navigation Language,Struts2中的表达式语言,用于在Action和视图之间传递数据。 **整合iBatis和Struts2的知识点:** 1. **Action与iBatis的结合**:Action中注入SqlSession或Mapper...

    struts2和hibernate的lib包

    Struts2框架是一个强大的MVC框架,它继承了Struts1的优点并引入了许多新的特性,如拦截器、插件支持和强大的动作调度。Struts2的核心库包括以下几个部分: 1. **Struts2核心库**:struts2-core.jar,包含Action、...

    struts2框架JAR包

    这个版本的Struts2引入了OGNL(Object-Graph Navigation Language)表达式语言,使得在视图层和控制器层之间传递数据更加灵活。此外,它还支持AJAX功能,可以通过JSON或者XML进行异步数据交互,增强了用户体验。 接...

    Struts2深刻理解所记的笔记

    #### 一、Struts2与Struts1的主要区别 在探讨Struts2之前,我们首先需要理解它与前辈Struts1之间的重要差异。Struts1是基于Servlet API构建的MVC框架,而Struts2则在此基础上进行了重大改进,不仅简化了开发流程,...

    Struts2示例2

    3. **OGNL(Object-Graph Navigation Language)**:Struts2默认使用OGNL作为表达式语言,用于在Action和视图之间传递数据。在示例中,你可能会看到OGNL在JSP中的使用,如何访问Action属性、动态表达式等。 4. **...

    struts项目2:基于struts与ibatis开发的图书管理系统

    首先,让我们深入了解一下Struts2框架。Struts2是Struts1的升级版,它弥补了Struts1的一些不足,如动作类的重复、过滤器的缺失等。Struts2的核心是Action类,它是处理用户请求的核心组件,通过配置Action映射,将...

    struts2 权威指南

    2. OGNL在Struts2中的应用:OGNL是Struts2的默认表示层语言,用于在Action和视图之间传递数据,以及在Action配置中引用对象属性。 五、Struts2的扩展性 1. 自定义拦截器:开发者可以创建自定义拦截器来实现特定功能...

    Struts2体系结构图例详解

    9. **OGNL(Object-Graph Navigation Language)**:OGNL是Struts2默认使用的表达式语言,用于在Action、值栈和视图之间传递数据。 10. **Struts2配置**:包括XML配置和注解配置,用于定义Action、拦截器、结果类型...

    struts2的核心jar包

    - OGNL是Struts2默认的表达式语言,用于在Action和视图之间传递数据。它支持复杂的对象导航和动态属性访问,使得在JSP中获取Action属性变得非常简单。 6. **结果类型(Result Types)**: - 结果类型定义了Action...

    struts2+spring2+ibatis集成

    1. **配置集成**:Struts2的配置文件(struts.xml)会引用Spring2的配置文件(spring-context.xml),使得Action实例可以通过Spring的IoC容器管理,实现Action的依赖注入。 2. **Action与Service**:Struts2的Action...

    struts2.3核心jar包

    Struts2内部广泛使用OGNL作为表达式语言,用于在Action与JSP之间传递数据,以及在配置文件中引用对象属性。 7. **动态方法调用(Dynamic Method Invocation,DMI)**: DMI允许通过URL直接调用Action的特定方法,...

Global site tag (gtag.js) - Google Analytics