• Struts2跟SpringMVC的区别


    1. 拦截机制不同

      Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter,getter吧request数据注入到属性。Struts2中,一个Action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了,只能设计为多例。

      SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。

     

    2. 底层实现的不同

      Struts2采用Filter(StrutsPrepareAndExecuteFilter)实现

      SpringMVC(DispatcherServlet)采用Servlet实现

      Filter在容器启动之后即初始化;服务停止以后坠毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。

     

    3. 拦截机制不同

      Struts2有自己的拦截器机制 interceptor

      SpringMVC用的是独立的AOP方式

     

    4. 与ajax的集成使用方式不同

      Struts2则需要自己手动将返回值数据转换成json格式,再手动写回浏览器。返回 NONE

      SpringMVC只需要在交互方法上加上@ResponseBody即可在返回值中返回数据,spring MVC会自动将返回值数据转换成json数据

     

    5. 数据存取方式不同

      Struts2采用的是值栈存储请求以及响应数据,OGNL存取数据

      SpringMVC采用request来解析请求内容,然后由其内部的getParameter给方法中形参赋值,再把后台处理过的数据通过ModelAndView对象存储,Model存储数据,View存储返回的页面,再把对象通过request传输到页面去

     

    6. 性能方面

      Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,加载一次单例模式bean注入。所以,SpringMVC开发效率和性能高于Struts2,而SpringMVC的内存消耗可以看成低于Struts2。

    部分参考来自原链接

  • 相关阅读:
    MP3/4维修全攻略
    看图学维修mp3之电源篇65Z8\65Z5
    CSS按钮样式之button标签与input type=button的区别详解
    【原】PNG的使用技巧
    【原】[webkit移动开发笔记]之禁止触发系统默认菜单
    【原】使用iScroll.js解决ios4下不支持position:fixed的问题
    【原】YUI压缩与CSS media queries下的bug
    【翻译】Building a Simple Blog Engine with ASP.NET MVC and LINQ Part 2
    【翻译】Building a Simple Blog Engine with ASP.NET MVC and LINQ Part 4
    .NET技术书籍推荐
  • 原文地址:https://www.cnblogs.com/convict/p/10374384.html
Copyright © 2020-2023  润新知