`
thinkerAndThinker
  • 浏览: 284771 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2与Struts1的对比

 
阅读更多


1,在Action实现类方面: 
Struts1要求Action类继承一个抽象基类;Struts1的一个具体问题是使用抽象类编程 
而不是接口。Struts2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制服务成为可能。 
Struts2 提供一个ActionSupport基类 去实现常用的接口。即使Action接口不是必须实现的,只有一个包含 
execute方法的POJO类都可以用作Struts2的Action。 


2,线程模式方面: 
Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。 


3,Servlet依赖方面: 
Struts1 Action依赖于Servlet API,因为Struts1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。 
Struts2 Action 不再依赖于ServletAPI,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。当然,如果Action 需要直接访问HttpServletRequest和HttpServletResponse参数,Struts2 Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问 
HttpServletRequest和HttpServletResponse,从而给开发者更多灵活的选择。 


4,可测试方面: 
测试Struts1 Action的一个主要问题是execute方法依赖于Servlet于ServletAPI, 这使得Action 仍然的测试要依赖于Web容器。为了脱离Web容器测试Struts1 的Action, 必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象,从而脱离Web容器测试Struts1的Action类。 
Struts2Action可以通过初始化,设置属性,调用方法来测试。 

5,封装请求参数方面: 
Struts1 使用ActionForm对象封装用户的请求参数,所有的ActionForm 必须继承一个 
基类:ActionForm。 普通的JavaBean不能用作ActionForm因此,开发者必须创建大量的ActionForm类封装用户请求参数。虽然Struts1 提供了动态ActionForm 来简化ActionForm 的开发,但依然需要在配置文件中定义ActionForm; Struts2 直接使用Action 属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的繁琐,实际上,这些属性还可以是包含子属性的Rich对象类型。如果开发者依然怀念Struts1 ActionForm 的模式 
Struts 2 提供了ModelDriven 模式, 可以让开发者使用单独的Model 对象来封装用户请求参数,但该Model对象无须继承任何Struts2基类,是一个POJO,从而 
降低了代码污染。 

6,表达式语言方面: 
Struts1 整合了JSTL,因此可以使用JSTL表达式语言。这种表达式语言有基本对象图遍 
历,但在对集合和索引属性的支持上则功能不强 
Struts2 可以是用JSTL,但它整合了一种更强大和灵活的表达 
式语言:OGNL(Object Graph Notation Language),因此,Struts2下的表达式语言功能更加强大。 


7,绑定值到视图方面: 
Struts1 使用标准JSP机制把对象绑定到视图页面; 
Struts2 使用“ValueStack”技术,使标签能够访问值,而不需要把对象和视图页面绑定在一起。 


8,类型转换的方面: 
Struts 1 ActionForm 属性通常都是String 类型。 Struts1 使用 
Commons-Beanutils 进行类型转换,支持基本数据类型和常用对象之间的转换。 


9,数据校验的方面: 
Struts1 支持在ActionForm 重写 validate方法手动校验,或者通过整合Commonsalidator框架来完成数据校验。 
Struts2 支持通过重写validator方法进行校验,也支持整合XWork校验框架进行校验 

10,Action执行控制的方面: 
Struts1 支持每一个模块对应一个请求处理(既生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。 
Struts2支持通过拦截器堆栈为每一个Action 创建不通的生命周期。开发者可以根据需要创建相应堆找,从而和不同的Action一起使用。

分享到:
评论

相关推荐

    Struts2学习笔记与心得

    ### Struts2与Struts1对比及特性解析 #### 一、Struts2与Struts1的区别 在探讨Struts2的学习心得之前,我们先来分析一下Struts2与Struts1之间的区别。 ##### 1.1 架构设计 - **Struts1**:采用MVC(Model-View-...

    struts1和struts2的区别

    ### Struts1与Struts2的主要区别 #### 概述 Apache Struts 是一个用于构建企业级Java Web应用的开源框架。它分为两个版本:Struts1 和 Struts2。虽然两者都基于模型-视图-控制器(MVC)设计模式,但它们之间存在...

    牧紫小岩的Struts2学习笔记

    #### Struts2与Struts1对比 在**牧紫小岩的Struts2学习笔记**中,提到了Struts1和Struts2在实例化Action上的关键差异。Struts1在启动时创建Action实例,并在整个应用程序运行期间复用该实例,这意味着所有用户请求...

    Struts1和Struts2的区别和对比

    Struts1的Action由于与Servlet API紧密耦合,测试较为复杂,需要依赖如Struts TestCase这样的第三方工具。Struts2 Action则可以通过依赖注入和模拟对象进行测试,使其更易于测试。 在捕获用户输入方面,Struts1使用...

    Struts1和Struts2的区别和对比.txt

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

    Struts1与Struts2本质区别

    ### Struts1与Struts2本质区别 #### 1. 在Action实现类方面的对比 - **Struts 1**:要求Action类必须继承一个抽象基类`Action`,这种设计方式意味着开发者必须按照预设的结构来编写代码,灵活性较低。这种通过抽象...

    struts1和struts2区别

    - **Struts1**:由于Action与Servlet API紧密耦合,测试较为困难,需要使用如Struts TestCase的第三方工具。 - **Struts2**:Action可以通过依赖注入进行测试,使得测试更加容易和独立。 5. **输入捕获**: - **...

    struts2与struts的对比

    ### Struts2与Struts的对比 #### 一、简介 在Java Web开发领域,Struts框架一直是构建企业级应用的重要工具之一。Struts最初版本(通常称为Struts1)自2001年发布以来,迅速成为Java企业级Web应用开发的事实标准。...

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    **Struts2与Spring MVC比较:** 1. **灵活性**:Spring MVC允许更多的自定义,如自定义拦截器、视图解析器,而Struts2的扩展性相对弱些。 2. **依赖注入**:Spring MVC是Spring框架的一部分,天然支持DI,而Struts2...

    struts1与struts2本质区别

    ### Struts1与Struts2的本质区别 #### 一、Action实现类的对比 - **Struts1**:要求Action类必须继承一个抽象基类,这意味着开发者必须遵守框架提供的特定结构,这在一定程度上限制了灵活性。此外,由于依赖于抽象...

    Struts2与Struts1的对比.chm

    关于struts2于struts1对比的资料,对于学习Java及struts的人来说是很有帮助的

    struts1和struts2的对比

    - **Struts2与Servlet API** - Struts2的Action不直接处理HTTP请求和响应,而是通过拦截器来间接访问。 - 这种设计减少了Action类对Servlet API的依赖,提高了组件间的解耦,也便于进行单元测试。 #### 表单和...

    spring与struts2整合

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

    struts1和struts2相关jar包(已分开

    与Struts 1相比,Struts 2更加强调POJO(Plain Old Java Object)和OGNL(Object-Graph Navigation Language)的使用,提供了更灵活的拦截器机制,使得业务逻辑的处理更加简洁。此外,Struts 2还支持多种视图技术,...

Global site tag (gtag.js) - Google Analytics