struts2不是struts1的升级,而是继承的webwork的血统,它吸收了struts1和webwork的优势。
Struts1和Struts2的区别和对比:
1、Servlet依赖性由于Action在被调用的时候,HttpServletRequest和HttpServletResponse被传递到execute()方法,struts1的Action对Servlet API有依赖 性,但如果在struts2中,Action就不会对容器有依赖性了,因为struts2的Action是由简单的POJO组成,在struts2中,Servlet上下文以简单的Map的形式表现出来,这使得Action可以得到独立的测试,如果需要,struts2也可以访问原始的请求与响应。
2、 Action类struts1要求action类继承一个基类,struts2 Action要求继承ActionSupport基类
3、验证struts1和struts2都支持通过validate方法的手动验证,struts1使用ActionForm中的validate方法,而struts2支持通过Validate方法和Xwork校验框架的手动验证
4、线程struts1是单例模式的并且必须是线程安全的,因为仅有一个Action的实例来处理所有请求,而struts2为每一个请求产生一个实例
5、易测性struts1一个主要问题是execute方法暴露了Servlet API,一个叫Struts TestCase的第三方扩展,提供了一个struts1测试用的模拟对象,但是struts2中,Action可以经由创建Action实例,设置属性,和调用方法来得到测试
6、获取输出struts1使用ActionForm来捕获输入,而所有的ActionForm需要继承一个框架依赖的基类,由于javabean不能当作ActionForm来用,开发人员不得不创建冗繁的类来获取出入,不过struts2用Action属性,这避免了需要创建第二个输入对象
7、表达式语音struts1与JSTL整合,struts2不仅支持jstl 还支持OGNL
8、将绑定值到视图中在视图层,struts1使用标准的JSP来绑定对象到页面上下文来访问,然而struts2使用一种叫值栈的技术,这使得标签可以访问值而不需将视图与正在呈递的对象类型连接起来,值栈允许重用一些属性名相同但类型不同的视图类型
9、类型转换通常struts1的ActionForm属性都是string类型的,struts1使用Commons-Beanutils进行类型转换,这些针对每一个类的类型转换无法为每一个实例配置,然而struts2使用OGNL来进行类型转换,框架包含了针对基础类型,常见对象类型与原始类型的转换器
10、Action执行控制struts1支持每一个模块的请求处理器的分离,但是同一模块下的所有Action必须共享相同的生命周期,struts2支持通过拦截器栈为每一个Action创建不同的生命周期,自定义栈可以视需要对不同的Action使用