Struts1框架与Struts2框架的对比分析

2010-04-05 17:05刘晓峰
电大理工 2010年2期
关键词:表达式线程校验

刘晓峰

辽宁广播电视大学(沈阳110034 )

0 引言

Struts2是Apache的开源框架之一,Struts2与Struts1相比。有很多革命性的改进,但它并不是新发布的框架,而是在WebWork框架基础上发展起来的。因为Struts2是Webwork的升级.而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证:而且吸收了Struts1和WebWork两者的优势。

1 Struts1框架与Struts2框架简介

1.1 Struts1框架简介

Struts1最初由程序员Craig R.Mcclanahan发布,Apache软件基金会于2002年接手该项目。Struts1提供了一个极好的框架,可以容易地整合JSP、Servlet和Java代码。随着Java的发展,Struts1已经成为MVC设计模式的常用架构,并被广大的程序员所接受,在Web开发应用中获得了巨大成功。

1.2 Struts2框架简介

Struts2采用一种非常松耦合的设计,让系统Action不再与Sevlet API耦合,增强了单元的测试性。Struts2具有强大的标签库,这些标签不仅提供了表现层的数据处理,同时还提供了国际化、Ajax、上传下载的功能。

2 Struts1框架与Struts2框架的对比分析

Struts2相对于Struts1已经发生了很多变化,使用起来更简单、便捷。下面是Struts2与Struts1的特性比较:

(1)Action类

Struts1要求Action类要扩展自一个抽象基类。Struts1的一个共有的问题是面向抽象类编程而不是面向接口编程。

Struts2的Action类实现了一个Action接口,连同其他接口一起来实现可选择和自定义的服务。Struts2提供一个名叫ActionSupport的基类来实现一般使用的接口。当然,Action接口不是必须的。任何使用execute方法的POJO对象可以被当作Struts2的Action对象来使用。

(2)线程模型

Struts1的Action类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。

Struts2 的Action对象为每一个请求都实例化对象,所以没有线程安全的问题。

(3)Servlet依赖

Struts1的Action类依赖于Servlet API,当Action被调用时,以 HttpServletRequest和HttpServletResponse作为参数传给execute方法。

Struts2的Action和容器无关。Servlet上下文被表现为简单的Maps,允许Action被独立的测试。Struts2的Action可以访问最初的请求(如果需要的话)。但是,尽可能避免或排除其他元素直接访问HttpServletRequest或HttpServlet-Response。

(4)易测性

测试Struts1的主要问题是execute方法暴露了Servlet API这使得测试要依赖于容器。第三方的扩展,如Struts TestCase,提供了一套Struts1的模拟对象(来进行测试)。

Struts2的Action可以通过初始化、设置属性、调用方法来测试。依赖注入的支持也使测试变得更简单。

(5)捕获输入

Struts1使用ActionForm对象来捕获输入。象Action一样,所有的ActionForm必须扩展基类。

Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。

(6)表达式语言

Struts1整合了JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是对集合和索引属性的支持很弱。

Struts2使用JSTL,但是也支持一个更强大和灵活的表达式语言--OGNL。

(7)将值绑定到页面

Struts1使用标准 JSP机制来绑定对象到页面上下文。

Struts2使用“ValueStack”技术,使 taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。

(8)类型转换

Struts1的ActionForm属性经常都是String。Struts1使用 Commons-Beanutils来进行类型转换。转换每一个类,而不是为每一个实例配置。

Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。

(9)验证

Struts1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。

Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持 chain校验子属性。

(10)Action执行控制

Struts1支持每一个模块有单独的生命周期,但是模块中的所有 Action必须共享相同的生命周期。

Struts2支持通过拦截器堆栈为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。

3 结束语

Struts2框架整合了Struts1和WebWork的优点,其最大的特点就是其简单性。从Apache官方的宣传来看,Struts2不久将会替代Struts1。

[1]王舂林,耿祥义.浅析Struts2框架. 现代经济信息, 2009

[2]孙卫琴.精通Struts:基于MVC的Java Web设计与开发.北京:电子工业出版社,2004

[3]闫术卓,杨强.Struts2技术详解:基于 WebWork核心的MVC开发与实践.电子工业出版社,2008

猜你喜欢
表达式线程校验
基于C#线程实验探究
一个混合核Hilbert型积分不等式及其算子范数表达式
表达式转换及求值探析
基于国产化环境的线程池模型研究与实现
浅析C语言运算符及表达式的教学误区
炉温均匀性校验在铸锻企业的应用
浅谈linux多线程协作
大型电动机高阻抗差动保护稳定校验研究
基于加窗插值FFT的PMU校验方法
民用建筑低压配电系统计算校验软件的探讨