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