注释:本文是在网上copy的 !觉得很好....
本章我们会比较这两个框架的不同特性.与Struts1相比,Struts2是非常简单的,下面是Struts2的一些优秀特性 :
5.1 Servlet依赖性
由于Action在被调用时,HttpServletRequest和HttpServletResponse被传递到execute()方法中,Struts1中的Action对Servlet的API是有依赖性的.但如果在Struts2中,Action就不会对容器有依赖了,因为Action是由简单的POJO组成的.在Struts2中,servlet上下文以简单的Map的形式表现出来,这使得Action可以得到独立的测试.如果需要,Struts2也可以访问原始的请求与响应.不过,其他的框架元素减少或排除直接访问HttpServetRequest或HttpServletResponse的必要.
5.2 Action类
使用抽象类而不是接口设计是Struts1设计上的问题,这已经在Struts2中得到了解决.Struts1中的Action类需要继承框架中依赖的抽象基础类.但在Struts2中,Action类可能会也可能不会实现接口来启用可选的或者自定义的服务.在Struts2中,Action是不会依赖于容器的,因为它是由简单的POJO组成的.Struts2提供了一个基础的ActionSupport类来实现一些常用的接口.尽管这样,Action接口仍然不是必须要继承的,任何含有execute方法的POJO对象都可以当作Action对象来用.
5.3 验证
Struts1与Struts2都支持通过validate方法的手动验证.Struts1使用ActionForm中的validate方法或者通过扩展Commons Validator来进行校验.然而,Struts2支持通过Validate方法与Xwork校验框架的手动验证. Xwork框架支持验证链到子属性----使用为属性类文件和校验上下文定义的验证.
5.4 线程模型
在Struts1中,Action资源一定是线程安全或者同步的.所以Action是singletons并且线程安全的,一定只有一个Action类的实例处理该Action 的所有请求,singleton策略限制了Struts1的Action所能完成的,并且需要更加谨慎的开发.但是在Struts2中,Action对象对每一个请求都生成实例,所以在Struts2中不存在线程安全的问题.实际上,servlet容器对每个请求产生了很多浪费的对象,一个或多个对象不会使性能变得糟糕或者唤起垃圾回收器.
5.5 易测性
测试Struts1的程序会有些复杂.测试Struts1 Action的主要障碍就是因为它暴露了servlet的API.一个叫Struts TestCase 的第三方扩展,提供了一组Struts1测试用的模拟对象.但是在Struts2中,Action可以经由创建Action的实例,设置属性,和调用方法来得到测试.依赖注入同样使测试变得更容易.Struts2中的Action是简单的POJO并且独立于框架,从此,Struts2中的测试是很简单的.
5.6 获取输入
Struts1使用ActionForm来捕获输入.而且所有的ActionForm需要继承一个框架依赖的基类.由于JavaBean不能当作ActionForm来用,开发人员不得不创建冗繁的类来获取输入.不过Struts2使用Action属性(例如输入属性不依赖于底层框架)这避免了需要创建第二个输入对象,从此冗繁减少了.此外在Struts2中,Action的属性可以通过标签在web页面中得到访问.Struts2同样支持ActionForm模式,POJO表单对象和POJO Action.甚至富对象类型,包括业务或域对象,都可以被当作输入/输出对象来使用.
5.7 表达式语言
Struts1与JSTL整合,所以它使用JSTL表达式语言.Struts1的表达式语言含有遍历图表的基础对象,但是在集合和索引属性的支持上表现不好.Struts2同样支持JSTL,但是它也支持一种更强大且灵活的表达式语言----“对象图标记语言”(OGNL)
5.8 将绑定值到视图中
在视图层,Struts1使用标准的JSP来绑定对象(在模型层被处理的)到页面上下文来进行访问.然而Struts2使用一种叫做值栈的技术,这使得标签可以访问值而不需将视图与正在呈递的对象类型连接起来.值栈允许重用一些属性名相同但类型不同的视图类型.
5.9 类型转换
通常Struts1的ActionForm属性都是String型的.Struts1使用Commons-Beanutils进行类型转换.这些针对每一个类的类型转换无法为每一个实例配置.然而Struts2使用OGNL来进行类型转换.框架包含了针对基础类型,常见对象类型与原始类型的转换器.
5.10 Action执行的控制
Struts1支持对每一个模块的请求处理器的分离(生命周期),但是同一模块下的所有Action必须共享相同的生命周期.Struts2支持通过拦截器栈为每一个Action创建不同的生命周期.自定义栈可以视需要对不同的Action使用.
分享到:
相关推荐
Struts1.x与Struts2.x是两种非常流行的Java Web应用程序框架,它们都由Apache软件基金会开发,旨在简化MVC(Model-View-Controller)架构的实现。然而,两者在设计哲学、功能特性以及实现方式上存在显著差异。以下是...
### Struts1.x与Struts2.x的主要区别 在深入探讨Struts1.x与Struts2.x的区别之前,我们先来了解一下这两个框架的基本背景。Apache Struts是用于构建企业级Web应用程序的开源框架,它提供了MVC(模型-视图-控制器)...
虽然现在Struts1.x已经被Struts2等更新的框架所取代,但它的基础思想和设计模式仍然是Java Web开发中的重要参考。对于想要了解Web开发历史或深入理解MVC框架的开发者来说,学习Struts1.x仍然具有一定的价值。
#### 二、Struts1.x 的工作原理与架构 1. **MVC 设计模式**:Struts1.x 采用了 MVC 架构模式,将应用程序划分为三个主要组成部分:模型(Model)、视图(View) 和控制器(Controller)。 - **模型(Model)**:处理数据和...
11. **Tiles框架集成**:Struts1.x可与Tiles框架结合使用,实现页面布局和组件重用,提高开发效率。 12. **Session和Application作用域**:Struts1.x通过ActionContext访问session和application作用域,方便数据...
然而,随着时间的推移,Struts 1.x 因为其局限性和安全问题,逐渐被Struts 2 和其他现代框架如Spring MVC、Play Framework等取代。尽管如此,了解 Struts 1.x 的基础知识对于理解Java Web开发的历史和演变仍然非常有...
Struts1.x是一款经典的Java Web框架,由Apache软件基金会开发并维护。它是MVC(Model-View-Controller)设计模式的实现,极大地简化了Java Web应用程序的开发过程。本资源集合包含了所有最新的Struts1.x项目应用,为...
Struts 2.x权威指南(第3版)
Struts1.x是一个经典的Java Web开发框架,它遵循Model-View-Controller(MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用程序。在这个"Struts1.x_Project.zip"压缩包中,我们可以看到一个使用Struts1.x...
【Struts1.x入门教程】 Struts1.x是Apache Jakarta项目的一个重要组成部分,它是一个用于构建企业级Web应用程序的开源MVC框架。该框架的主要目标是简化JavaServer Pages(JSP)、Servlet和标签库的使用,同时提升...
Struts1.x是一个经典的Java Web框架,它在20世纪末至21世纪初被广泛使用,用于构建基于MVC(Model-View-Controller)架构的Web应用。本示例将探讨如何使用Struts1.x实现一个简单的登录功能。首先,我们需要理解...
**Struts2.x与Struts1.x对比**:相较于Struts1.x,Struts2.x具有更多的优势,如不再强制要求ActionForm,配置文件更简洁,处理流程更加清晰。具体而言,请求首先被过滤器捕获,然后根据`struts.xml`文件的配置调用...
Struts1.x是一个经典的Java Web框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在国际化(i18n)方面,Struts1提供了强大的支持,使得应用程序可以适应不同语言和地区的用户需求。以下是关于Struts1.x国际化...
Struts 1.x 是一个经典的Java Web开发框架,由Apache软件基金会开发,它极大地...不过需要注意的是,Struts 1.x已经较为老旧,目前更推荐使用Struts 2或者Spring MVC等更新的框架,它们提供了更多的特性和更好的性能。
freemarker与struts 1.x 结合,生成html 在http://blog.csdn.net/chen1255 的web中有详细描述关于freemarker与struts1.x的结合
本篇文章将深入探讨Struts1.x和Struts2.x在向Action中填充JSP参数的原理。 Struts1.x的工作原理: Struts1的核心是ActionServlet,它是一个实现了Servlet接口的控制器。当用户发起HTTP请求时,请求会被Dispatcher...
同时,教程中也会涉及与Struts 2.x的比较,帮助开发者理解两个版本之间的相似之处和差异。 ### Struts 1.x 入门基础 1. **Struts 1.x 概述**: - Struts 1.x 是一个成熟的MVC框架,它将Servlet API封装,提供了一...
Struts1.x是一个非常经典的Java Web开发框架,它在过去的许多年里被广泛使用。文件上传功能是Web应用中常见的需求之一,特别是在处理用户需要提交多个文件的场景下。Struts1.x提供了处理多文件上传的功能,使得...
然后,Struts2与Spring的整合主要是通过Spring的Struts2插件实现,它可以自动将Struts2的Action实例化交给Spring管理,实现依赖注入。这样,Action类就可以通过@Autowired注解获取到由Spring管理的其他服务bean。 ...