本章我们会比较这两个框架的不同特性.与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使用.
分享到:
相关推荐
**Struts2.x与Struts1.x对比**:相较于Struts1.x,Struts2.x具有更多的优势,如不再强制要求ActionForm,配置文件更简洁,处理流程更加清晰。具体而言,请求首先被过滤器捕获,然后根据`struts.xml`文件的配置调用...
本学习笔记将对Struts1和Struts2进行详细解析。 **Struts1简介** Struts1是早期流行的MVC框架,它的核心是ActionServlet,负责处理HTTP请求,并通过ActionForm对象收集表单数据,然后调用Action类的方法进行业务...
Struts1.x是一个非常经典的Java Web开发框架,它在企业级应用中被广泛使用。而Struts1.x的令牌机制(Token)则是防止重复提交、跨页请求攻击的重要手段。在此,我们将深入探讨Struts1.x令牌的使用方法及其背后的原理...
Struts 1.x 是一款基于模型-视图-控制器(MVC)设计模式的Java Web框架,它在早期的Web应用程序开发中占据了重要的地位。...同时,对比Struts 2.x,可以了解到框架的发展和不同之处,提升对现代Web开发的理解。
### Struts1.x与Struts2.x的对比 相比于Struts1.x,Struts2.x在多个方面进行了改进: - **对Servlet API的依赖减少**:Struts2.x通过拦截器机制,降低了对Servlet API的直接依赖,使得Action对象更加纯粹,易于...
### Struts 1.x 学习笔记 #### 一、MVC 概述 MVC(Model-View-Controller)模式是一种广泛应用于软件工程中的设计模式,尤其在Web应用程序开发中非常常见。它将应用程序分为三个核心部分: 1. **模型(Model)**...
本文将深入探讨Struts2的基础知识,包括其核心概念、主要特性以及与Struts1.x的区别。 一、Struts2的核心概念 1. **FilterDispatcher**:Struts2的核心控制器,负责接收HTTP请求,解析Action映射,然后调用相应的...
Spring MVC 和 Struts2.x 是两个广泛使用的Java Web开发中的MVC框架,它们各自具有不同的特点和优势。这里我们将深入探讨这两个框架的核心组件、工作原理以及它们之间的对比。 首先,让我们了解一下Spring MVC。...
通过对比Struts1.x的编程方式,可以看出Struts2在很多方面都有所改进,如使用过滤器作为入口点、采用更灵活的Action编写方式等。掌握了这些基础知识后,开发者可以更好地利用Struts2的强大功能来构建高效、稳定的...
- **现代框架对比**:Struts 2与Spring MVC、Play Framework等现代框架相比,可能存在维护成本高、社区活跃度低等问题,开发者需要权衡选择。 总之,了解并掌握Struts的各个版本及其特性,对于理解Web开发的历史...
1. **为什么要升级Struts?** Struts 2.5.x版本包含了众多的安全修复和性能优化,特别是对于一些已知的安全漏洞,如CVE-2017-9791、CVE-2017-5638等。升级到最新版本有助于提高应用的安全性,防止恶意攻击,并且能够...
1. **灵活性**:Struts 2的文件上传功能比Struts 1.x更强大,且与整个框架集成度高。而SmartUpload作为独立库,提供了更多自定义选项。 2. **易用性**:对于熟悉Struts的开发者来说,Struts 2的文件上传配置相对简单...
- **特性对比**:在第1章中,作者详细对比了Struts2与其他流行的J2EE框架之间的特点。例如,Spring MVC以其简洁的设计理念受到许多开发者的青睐;而Struts2则以其强大的插件机制和配置灵活性著称。 - **优势分析**:...
例如,2.3.x版本可能还保留了一些早期的设计,如ActionContext、Interceptor等关键组件的实现,这对于学习Struts2的历史和发展非常有价值。 Struts2的核心组件主要包括: 1. **Action**: 表示业务逻辑,通常对应...
通过对比Struts 1.x和Struts 2.x的不同版本及其特性,我们可以看出Struts 2.x在很多方面都优于Struts 1.x。尽管如此,具体选择哪个版本还需要根据项目的实际需求和技术背景来决定。无论是选择Struts 1.x还是2.x,...
#### 二、Struts 1.x与Struts 2.0的Action模型对比 在讨论Struts 2.0中的Action之前,我们需要先了解一下Struts 1.x和Struts 2.0在Action处理机制上的差异。 ##### 2.1 Struts 1.x的Action模型 在Struts 1.x中,...
Struts1与Struts2的对比** - **代码量**: Struts2相较于Struts1减少了需要编写的代码量。 - **类的依赖**: Struts1中家族类之间的依赖关系复杂,容易导致维护困难;而Struts2改进了这一问题,提高了代码的复用性和...
六、Struts1_1_.x与现代框架对比 尽管Struts1_1_.x在当时有着广泛的应用,但随着技术的发展,它逐渐被Spring MVC、Play Framework等更现代的框架取代。这些新框架提供了更好的注解支持、依赖注入和模块化设计,使得...
下面我们将从Struts1.x与Struts2.0标签库的对比入手,再深入探讨Struts2中的非UI标签。 ##### 2.1 Struts1.x与Struts2.0 标签库对比 - **分类**:Struts1.x的标签库按照功能划分为HTML、Tiles、Logic和Bean等几个...