Struts1
与
Struts2
的区别
1)
数据封装:
Struts1
有
From
类和
Action
类,
属性封装
From
类里,在
Struts2
里只有
Action
类,属性直接封装
Action
类里。
2)
路径访问:
Struts1
中访问
Action
必须使用
*.do
,
Struts2
中支持
*.do
以及
*.action
。
3)
主控制器:
Struts1
中主控制器是
Servlet
,
Struts2
中主控制器是
Filter
。
4)
Action
类:
Struts1
中
Action
必须继承
org.apache.struts.action.Action
,
Struts2
中
Action
可以是一个普通
JavaBean
。
5)
线程模型:
Struts1
的
Action
工作在单例模式,
一个
Action
的实例处理所有的请求,
线程不安全。
Struts2
的
Action
是一个请求对应一个实例,线程安全。
6)
Servlet
依赖:
Struts1
的
Action
依赖于
Servlet
API
。
Struts2
中的
Action
不再依赖于
Servlet API
,有利于测试,并且实现
TDD
。
7)
表达式语言:
Struts1
中整合了
EL
,但是
EL
对集合和索引的支持不强,
Struts2
整合
了
OGNL
(
Object Graph NavigationLanguage
,对象导航图语言)
,功能更强大,更便
于使用。
8)
绑定值到视图:
Struts1
使用标准的
JSP
,
Struts2
使用“
ValueStack
(值栈)
”技术。
ValueStack
策略允许通过一系列名称相同但类型不同的属性重用页面(
view
)
。
9)
数据校验:
Struts1
中支持在
ActionForm
中覆盖
validate
方法或者使用
Commons
Validator
框架。
Struts2
支持在
Action
中重写
validate
方法或者使用
XWork
的验证
框架。
10)
Action
执行控制:
Struts1
支持每一个模块对应一个请求处理,但是模块中的所有
Action
必须共享相同的生命周期(
Request
Processors
)
。
Struts2
支持通过拦截器堆
栈为每一个
Action
创建不同的生命周期。
11)
类型转换:
Struts1
的
ActionForm
属性经常都是
String
。
Struts1
用
Commons-Beanutils
来进行类型转换。转换每一个类,而不是为每一个实例配置。
Struts2
使用
OGNL
进行类型转换。提供基本和常用对象的转换器。