Struts1和Struts2的区别比较
来源:互联网 发布:十大炒股软件排名 编辑:程序博客网 时间:2024/05/16 06:11
特征
Struts 1
Struts 2
Action类
Struts1的action需要去继承一个抽象基类。一个普遍问题就是Struts1是面向抽象类编程来代替接口编程
Struts2的action可以实现一个Action接口,也可以同时实现一些其他的接口来添置一些附加的,常用的服务。Struts2提供一个基类ActionSupport实现了一些常用的接口。虽然Action接口不是必须的。任何附带execute方法的POJO对象都可以作为Struts2的action对象。
线程模型
Struts1的action是单例的而且必须是线程安全的,因为该类会只有唯一一个引用来为action处理所有的请求。单例策略会限制Struts1的action的功能以及需要扩展的额外的功能(The singleton strategy places restrictions on what can be done with Struts 1 Actions and requires extra care to develop)。Struts1的action必须是线程安全的并且是同步的。
Struts2的Action对象是针对每一个请求的,所以自然也就不存在线程安全问题了。(实践中,servlet容器给每一个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题)
Servlet的依赖
Struts1的Action依赖于Servlet API,因为当Action被调用的时候HttpServletRequest和HttpServletResponse对象是通过execute方法进行处理的。
Struts2的Action和容器的连接并不紧密。通常servlet上下文被描绘成简单的Map映射,允许Action被单独测试。当然,如果需要的话Struts2的Action也可以通过访问初始的request和response来完成一些功能。然而,其他的一些架构元素导致降低或者删除了直接访问request和response的需求。
易测试性
测试Struts1的Action有一个大障碍就是execute方法是直接暴露于servlet API的。
Struts2的Action可以很容易的通过设置属性调用方法来进行测试。当然依赖注入的支持也使得测试变得简单。
输入处理
Struts1使用一个ActionForm对象来获取用户的输入。和action一样,所有的ActionForm都必须继承自一个基类。因为其他的javaBean不能被用作ActionForm,开发者通常要写一些多余的类来获取用户输入。DynaBean可以被用做生成ActionForm类的一个选择,但是开发者需要对现有的javaBean进行重写。
Struts2使用Action属性作为输入属性,除掉了对于输入对象的需求。输入属性可以是一个拥有他自己的属性的对象。Action属性是通过标签和web页面交互。Struts2也支持ActionForm模型,就是POJO的Form对象和POJO的Action。多数的对象类型,包括商业逻辑对象和领域对象都可以作为输入/输入对象。模式驱动特征简化了标签和POJO输入对象的关系。
表达式语言
Struts1和JSTL结合,所以他可以使用JSTL的EL。
Struts2也支持JSTL,但是这个框架也支持更加强大的表达式语言OGNL.
表现层和类型值的绑定
Struts1使用标准的JSP机制将对象绑定到page context来进行访问。
Struts2使用”ValueStack”技术,所以标签不用将视图和表现的对象结合就可以得到值.ValueStack策略允许通过一系列可能具有相同属性名字但是不同属性类型的的类型来完成视图的重用,
类型转换
Struts1的ActionForm通常都是String类型。Struts1通过Commons-Beanutils实现类型转换。
Struts2使用OGNL实现类型转换,框架包含了对基础和公共类型的转换器。
验证
Struts1支持通过ActionForm中的validate方法实现手工验证。也可以通过扩展通用的验证框架进行验证。对于同一个类可以有不同的验证,但是不能关联到子对象的验证。
Struts2也支持通过validate方法进行手工验证以及Xwork验证框架进行验证。Xwork验证框架支持将验证链接到子属性,子属性使用了为属性类型和验证上下文定义的验证。
Action执行的控制
Struts1支持为每一个模块分配请求处理(生命周期),但是一个模块中的所有Action必须分享相同的生命周期。
Struts2支持通过拦截器栈为每个Action创建不同的生命周期。通常对于不同的Action根据需要都要有对应的栈被创建和使用。
http://struts.apache.org/2.0.11/docs/comparing-struts-1-and-2.htmlStruts 2 uses Action properties as input properties, eliminating the need for a second input object. Input properties may be rich object types which may have their own properties. The Action properties can be accessed from the web page via the taglibs. Struts 2 also supports the ActionForm pattern, as well as POJO form objects and POJO Actions. Rich object types, including business or domain objects, can be used as input/output objects. The ModelDriven feature simplifies taglb references to POJO input objects.
Struts2是WebWork的升级,而不是Struts 1.x的升级。虽然Struts 2提供了与Struts1.x的兼容,但已经不是Struts1.x的升级。对于已有Struts1.x开发经验的开发者而言,Struts1.x的开发经验对于Struts2并没有太大的帮助;相反,对于已经有WebWork开发经验的开发者而言,WebWork的开发经验对Struts2的开发将有很好的借鉴意义。
- Struts1和Struts2的区别比较
- 学习比较Struts2和Struts1的区别
- Struts1和Struts2的区别比较
- struts1和struts2的比较
- struts1和struts2的比较
- struts1和struts2的比较
- struts1和struts2的比较
- Struts1和Struts2的比较
- Struts2和struts1的比较
- Struts1和Struts2的区别
- struts1和struts2的区别
- Struts1和Struts2的区别
- struts1和struts2的区别
- Struts1和Struts2的区别
- Struts1和Struts2的区别
- struts1和struts2的区别
- struts1和struts2的区别
- Struts1和Struts2的区别
- 很全面的json转换类
- 深入理解面向对象设计的七大原则
- 驾驶人科目一模拟考试系统破解(驾照模拟考试软件破解)纪要
- log4j控制日志文件大小
- haskell的世界观(4)
- Struts1和Struts2的区别比较
- 关注STM(software transactional memory)
- zju1007
- 用haskell实现select的timeout(待解决)
- practical haskell: producer-consumer多线程的实现
- 总理宣布部属师范大学实行师范生免费教育
- JMenu_1
- tagging file system + CMS构思
- YAPC::Beijing 2007