MVC框架比较-struts1、struts2、springMVC (二)
类,因为只有一个示例 控制所有的请求。单例类策略造成了一定的限制 且给开发带来了额外的烦恼。Action 资源必须是线程安全或者同步的。 Struts 2 Action 对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet 容器产生许多丢弃的对象对于每一个请求,多于一个的对象并不影响垃圾收集)
Servlet依赖 Struts 1 的Action 类依赖于servlet API 以为HttpServletRequest和HttpServletResponse 作为参数传给execute 方法当Action 被调用时。 Struts 2 的Action 不和容器有关。Servlet 上下文被表现为简单的Maps ,允许Action被独立的测试。Struts 2 的Action 可以访问最初的请求和相应,如果需要的话。然而,其他的架构元素减少或者排除直接访问HttpServletRequest 或者HttpServletResponse 的需要。
易测性 测试Struts 1 的主要障碍是execute 方法暴露了Servlet API 。第三方的扩展,Struts 测试用例,提供Struts 1 的集合对象。 Struts 2 的Action 可以通过实例化Action 测试,设置属性,然后调用方法。依赖注入的支持也是测试变得更简单。
接受输入 Struts 1 使用ActionForm 对象 捕获输入。象Action 一样,所有的ActionForm 必须扩展基类。因为其他的
JavaBean 不能作为ActionForm 使用,开发者经常创建多余的类 捕获输入。DynaBeans 可以被用来作为替代ActionForm 的类 创建。但是开发者可以重新描述已经存在的JavaBean 。 Struts 2 Action 属性作为输入属性,排除第二个输入对象的需要。输入属性可能有丰富的对象类型这些类型有他们自己的属性。Action 的属性可以通过标签库 访问。Struts 2 也支持ActionForm 形式。丰富的对象类型,包含业务或者域对象,可以被当作输入或者输出对象 使用。模型驱动特性简化标签对POJO 输入对象的引用。 既可以属性作为输入属性,也可以作为参数输入属性。
表达式语言 Struts 1 整和JSTL ,所以它使用JSTL 的表达式语言。表达式语言有基本的图形对象移动,但是相对很弱的集合和被索引的属性支持。 Struts 2 使用JSTL ,但是框架也支持更强大和更灵活的表达式,叫做“对象图形符号语言”(OGNL )。 整合JSTL
将值绑定要视图上 Struts 1 使用标准JSP 机制来绑定对象到页面上下文。 Struts 2 使用“ ValueStack ”技术为了标签库可以不用链接你的视图到对象的表现类型 访问值。ValueStack 策略允许重用视图。
类型转换 Struts 1 的ActionForm 属性经常都是String 的。Struts 1 使用Commons-Beanutils 类型转换。转换每一个类, 不是为每一个实例配置。 Struts 2 使用OGNL 类型转换。框架包含转换器 为基本的和共同的对象类型和原始类型。
验证 Struts 1 支持手动验证凭借ActionForm 的validate 方法,或者通过扩展的公用验证器。类可以有不同的验证上下文 未相同的类,但是不能不能包括验证子对象。 Struts 2 支持手动验证凭借validate 方法和XWork 验证框架。Xwork 验证框架支持一连串的验证子属性使用的验证为了属性类的类型和严正上下文而定义。 支持JSR303验证
Action执行的控制 Struts 1 支持独立的请求处理器对于每一个模型,但是所有在模型中的Action必须共享同一个生命周期。 Struts 2 支持在每一个Action 基础上凭借拦截栈创建不同的生命周期。自定义栈可以被创建 且使用不同的所需 的Action 。 spring mvc是基于方法的设计,在spring3 mvc中,一个方法对应一个request上下文