Action类的实现方式
- Struts1的Action在实现的时候必须扩展Action类或者Action类的子类
- Struts2的Action在实现的时候可以不用实现任何类和接口(虽然Struts2中提供了一个ActionSupport类,但是不是必须实现的)
线程模式
- Struts1是单例模式,必须设计成线程安全的
- Struts2则为每个请求产生一个实例
Servlet依赖
- Struts1的Action类依赖于Servlet API,从其execute的方法签名就可以看出
execute方法中有两个Servlet参数HttpServletRequest和HttpServletResponse - Struts2则不依赖于Servlet API
可测性
- Struts1依赖于Servlet API这些Web元素,所以对Struts1的Action进行测试是很困难的,需要借助于其他的测试工具
- Struts2的Action可以像测试其他的一些Model层的Service类一样进行测试
抓捕输入
- Struts1的Action与View通过ActionForm或者其子类进行数据传递,虽然也有LazyValidationForm这样的ActionForm的出现,但是还是不能像其他层面那样通过一个简单的POJO进行数据传递
- Struts2可以通过一个简单的POJO进行数据传递,将那样的奢望变成了现实
表达式语言
- Struts1绑定了JSTL,为页面的编写带来了方便
- Struts2整合了ONGL,也可以使用JSTL,因此,Struts2下的表达式语言更加强大