• 请说说Struts1和Struts2的区别?


    特性

    Struts1

    Struts2

    Action

    Struts1.x要求Action类要扩展自一个抽象基类。Struts1.x的一个共有的问题是面向抽象类编程而不是面向接口编程。

    Struts2的Action类实现了一个Action接口,连同其他接口一起来实现可选择 和自定义的服务。Struts2提供一个名叫ActionSupport的基类

    来实现一般使用的接口。当然,Action接口不是必须的。任何使用 

    execute方法的POJO对象可以被当

    作Struts 2的Action对象来使用。

    线程模型

    Struts1.x Action类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且给开发带来了额外的烦恼。Actio

    n资源必须是线程安全 或者同步的。

    Struts2 Action对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet容器给每一个请求产生许多丟弃的对象,并且

    不会导致性能和 垃圾回收问

    Servlet依赖

    Struts1.x的Action类依赖于servlet API,当Action被调用时,以HttpServletRequest和HttpServletResponse

    作为参数传给execute方法。

    Struts2的Action和容器无关。Servlet上下文被表现为简单的Maps,允 许Action被独立的测试。Struts2

    的Action可以访问最初的请求(如果需要的话)。但是,尽可能避免或排除其他元素直接访问 

    HttpServletRequest或HttpServletResponse。

    易测性

    测试Struts1.x的主要问题是execute方法暴露了Servlet API这使得测试要依赖于容器)。第三方的扩展,如Struts TestCase,提供了一

    套Struts1的模拟对象(来进行测

    试)。

    Struts2的Action可以通过初始化、设置属性、调用方法来测试。依赖注入的支持也是测试变得更简单。

    捕获输入

    Struts1.x使用ActionForm对象来捕获输入。象Action一样,所有的 

    ActionForm必须扩展基类。因为其

    他的JavaBean不能作为ActionFor

    m使用,开发者经常创建多余的类来捕获输入。 DynaBeans可以被

    用来作为替代ActionForm的类来创建。但是,开发者可能是在重新描

    述(创建)已经存在的JavaBean(仍然

    会导致有 冗余的javabean)。

    Struts2直接使用Action属性作为输入属性,消除了对第二个输入对

    象的需求。输入 属性可能是有自己

    (子)属性的rich对象类型。Action属

    性能够通过web页面上的taglibs访问。Struts2也支持ActionForm 模式

    。rich对象类型,包括业务对象,能够用作输入/输出对象。这种

    ModelDriven 特性简化了taglib对

    POJO输入对象的引用。

    表达式语言

    Struts1.x整合JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是对集合

    和索引属性的支持很弱。

    Struts2使用JSTL,但是也支持一个更强大和灵活的表达式语言--”Object Graph Notation

    Language” (OGNL)。

    将值绑定到页面

    Struts1.x使用标准JSP机制来绑定对象到页面上下文。

    Struts2使用“ValueStack”技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允 许通过一系列名

    称相同但类型不同的属性重用页面

    (view)

    类型转换

    Struts1.x的ActionForm属性经常都是String。Struts 1.x使用Commons-Beanutils来进行类型转换。转换

    每一个类,而不是为每一个实例配置。

    Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。

    验证

    Struts1.x支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同

    一个类可以有不同的校验内容,但

    不能校验子对象。

    Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的

    校验和内容校验,来支持 chain校

    验子属性

    Action执行控制

    Struts1.x支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相

    同的生命周期。

    Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需

    要和不同的Action一起使用。

    Java Program!
  • 相关阅读:
    剑指offer 51.构建乘积数组
    剑指offer 50.数组中重复的数字
    股票价格涨跌预测—基于KNN分类器
    R语言-神经网络包RSNNS
    基于客户保持率的人口特性分析
    车辆碰撞位置间的关联性分析
    统计学的七大支柱[转载@谢益辉]
    AutoDesK演示项目部署
    自定义数字键盘组件化方案
    2020年大前端发展趋势
  • 原文地址:https://www.cnblogs.com/programb/p/12995909.html
Copyright © 2020-2023  润新知