现在的位置: 首页 > 综合 > 正文

Struts2与Struts1的对比

2018年05月09日 ⁄ 综合 ⁄ 共 2160字 ⁄ 字号 评论关闭

(注意: 本文摘自 Struts2.0 权威指南)

Struts 2
Struts
1

上做出了巨大的改进,的确是一个非常具有实用价值的MVC
框架。下面是Struts 1
Struts 2
在各方面的简要对比。

1.在
Action
实现类方面的对比:

Struts 1
要求
Action
类继承一个抽象基类

Struts 1
的一个具体问题是使用抽象类编程而不是接口。
Struts 2 Action
类可以实
现一个
Action
接口,也可以实现其他接口,使可选和定制的服务成为可能。
Struts 2
提供一个
ActionSupport
基类去

实现常用的接口。即使
Action
接口不是
必须实现的,只有一个包含
execute
方法的
POJO
类都可以

用作
Struts 2

Action


2.
线程模式方面的对比:

Struts 1 Action
单例模式
并且必须是线程安全的,因为仅有

Action
的一个实例来处理所有的请求。单例策略
限制了

Struts 1 Action
能做的事,并且要在开发时特别小心。
Action
资源必须是线程安全的或同步的;
Struts 2 Action
对象为每一个请求产生一个实例,因此没有线程安全问题。

 

3. Servlet
依赖方面的对比:

Struts 1 Action
依赖于
Servlet API
,因为
Struts 1 Action

execute
方法中有
HttpServletRequest

HttpServletResponse
方法。
Struts 2 Action
不再依赖于
Servlet API
,从而允许
Action
脱离
Web
容器运行,从而降低了测试
Action
的难度。


当然,如果
Action
需要直接访问
HttpServletRequest

HttpServletResponse
参数,
Struts 2 Action
仍然可以访问它们。但是,大部分时候,
Action
都无需直接访问
HttpServetRequest

HttpServletResponse
,从而给开发者更多灵活的选择。

 

4.
可测性方面的对比:

测试
Struts 1 Action
的一个主要问题是
execute
方法依赖于
Servlet API
,这使得
Action
的测试要依赖于
Web
容器。为了脱离
Web
容器测试
Struts 1

Action
,必须借助于第三方扩展:
Struts TestCase
,该扩展下包含了系列的
Mock
对象(模拟了
HttpServetRequest

HttpServletResponse
对象),从而可以脱离
Web
容器测试
Struts 1

Action
类。
Struts 2 Action
可以通过初始化、设置属性、调用方法来测试。

 

5.
封装请求参数的对比:

Struts 1
使用
ActionForm
对象封装用户的请求参数,所有的
ActionForm
必须继承一个基类:
ActionForm
。普通的
JavaBean
不能用作
ActionForm
,因此,开发者必须创建大量的
ActionForm
类封装用户请求参数。虽然
Struts 1
提供了动态
ActionForm
来简化
ActionForm
的开发,但依然需要在配置文件中定义
ActionForm

Struts 2
直接使用
Action
属性来封装用户请求属性,避免了开发者需要大量开发
ActionForm
类的烦琐,实际上,这些属性还可以是包含子属性的
Rich
对象类型。如果开发者依然怀念
Struts 1 ActionForm
的模式,
Struts 2
提供了
ModelDriven
模式,可以让开发者使用单独的
Model
对象来封装用户请求参数,但该
Model
对象无需继承任何
Struts 2
基类,是一个
POJO
,从而降低了代码污染。

 

6.
表达式语言方面的对比:

1
整合了
JSTL
,因此可以使用
JSTL
表达式语言。这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强;
Struts 2
可以使用
JSTL
,但它整合了一种更强大和灵活的表达式语言:
OGNL

Object Graph Notation Language
),因此,
Struts 2
下的表达式语言功能更加强大。

 

7.
绑定值到视图的对比:

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

 

8.
类型转换的对比:

Struts 1 ActionForm
属性通常都是
String
类型。
Struts 1
使用
Commons-Beanutils
进行类型转换,每个类一个转换器,转换器是不可配置的;
Struts 2
使用
OGNL
进行类型转换,支持基本数据类型和常用对象之间的转换。

 

9.
数据校验的对比:

Struts 1
支持在
ActionForm
重写
validate
方法中手动校验,或者通过整合
Commons alidator
框架来完成数据校验。
Struts 2
支持通过重写
validate
方法进行校验,也支持整合
XWork
校验框架进行校验。

 

10. Action
执行控制的对比:

Struts 1
支持每一个模块对应一个请求处理(即生命周期的概念),但是模块中的所有
Action
必须共享相同的生命周期。
Struts 2
支持通过拦截器堆栈(
Interceptor Stacks
)为每一个
Action
创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的
Action
一起使用。

抱歉!评论已关闭.