• Struts2


    一、Struts2 是什么?

    Struts2 刚开始是 Jakarta 项目的子项目,后来转到了 Apache 软件基金会下的一个开源子项目。

    Apache Struts 2 是一个基于 MVC 设计模式的、简洁的、可扩展的、成熟的 web 应用程序框架

    二、MVC 模式

    在 mvc 模式之前,代码和业务都写在 jsp 文件中,非常臃肿,没有分离。早期,Sun 公司推出了两种模式:




    适用于小型网站开发,model1 已经做了初步的表达和内容的分离。并不能满足大型的、复杂的项目,如果采用 model1,导致在 jsp 中嵌入大量的代码片段,可读性非常差。



    model2 是最典型的 mvc 模式。

    MVC 是模型视图控制器(Model、View、Controller),一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

    MVC 业务流程:



    MVC 的核心思想是业务数据抽取同业务数据呈现相分离。程序分层,分工合作,既互相独立,又协同工作

    三、Struts2 的发展历史

    • 2001 年 Struts1 发布;
    • 2007 年 Struts2 发布;

    Struts2 不是一个全新的框架,是在 WebWork 框架的基础上升级的。因此稳定性、性能等各方面都有很好的保证,同时吸收了 Struts1 和 WebWork 两者的优势。

    使用 Struts2 的目的是为了从构建、部署、到应用程序维护方面来简化整个开发周期。

    Apache Struts 官方网站
    Struts 历史版本

    四、Struts 的工作原理

    1. 用户通过 HttpServletRequest 用户请求发送过来;
    2. 经过一系列的核心的过滤器;
    3. 到达 FilterDispatcher(最新的是 StrutsPrepareAndExecuteFilter);
    4. ActionMapper 查找

    五、Struts 的优缺点

    优点

    • POJO表单及POJO操作
    • 标签支持
    • AJAX支持
    • 易于整合
    • 模板支持
    • 插件支持
    • 性能分析
    • 易于修改标签
    • 促进减少配置
    • 视图技术

    缺点:

    • 更大的学习曲线
    • 文档缺乏
    • 不够透明

    六、Struts 与 SpringMVC 的区别

    1. 框架机制

      SpringMVC 和 struts2 的加载机制不同:SpringMVC 的入口是 servlet,而 struts2 是 filter。

      • Struts2 采用Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用Servlet实现。
      • Filter 在容器启动之后即初始化,服务停止以后销毁,(晚于 Servlet)。Servlet 是在调用时初始化(先于Filter 调用),服务停止后销毁。
    2. 拦截机制

      • Struts2
        • Struts2 框架是类级别的拦截,每次请求就会创建一个 Action,和 Spring 整合时 Struts2 的 ActionBean 注入作用域是原型模式prototype(否则会出现线程并发问题),然后通过setter,getter 把 request 数据注入到属性。
        • Struts2 中,一个 Action 对应一个 request,response 上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。
        • Struts2 中 Action 的一个方法可以对应一个 url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了
      • SpringMVC
        • SpringMVC 是方法级别的拦截,一个方法对应一个 Request 上下文,所以方法直接基本上是独立的,独享 request,response 数据。而每个方法同时又何一个 url 对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过 ModelMap 返回给框架。
        • 在 Spring 整合时,SpringMVC 的 Controller Bean 默认单例模式 Singleton,所以默认对所有的请求,只会创建一个 Controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加 @Scope 注解修改。
    3. 性能方面

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

    4. 拦截机制

      Struts2 有自己的拦截 Interceptor 机制,SpringMVC这是用的是独立的 AOP 方式,这样导致 Struts2 的配置文件量还是比 SpringMVC 大。

    5. 配置方面

      SpringMVC 和 Spring 是无缝的。从这个项目的管理和安全上也比 Struts2 高(当然 Struts2 也可以通过不同的目录结构和相关配置做到 SpringMVC 一样的效果,但是需要 xml 配置的地方不少)。

      SpringMVC 可以认为已经 100% 零配置。

    6. 设计思想

      Struts2 更加符合 OOP 的编程思想, SpringMVC 就比较谨慎,在 servlet 上扩展。

    7. 集成方面

      SpringMVC 集成了 Ajax,使用非常方便,只需一个注解 @ResponseBody 就可以实现,然后直接返回响应文本即可,而 Struts2 拦截器集成了 Ajax,在 Action 中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。

    七、内容来源

    Amboo 技术价值在于普惠 - Springmvc与Struts区别?

  • 相关阅读:
    编译原理笔记 2
    编译原理笔记 1
    初步学习计算机图形学 [闫令琪]
    复杂 Web 前端的设计
    使用 GitHub Actions 部署 .Net 5 程序
    ES 2020 Optional Chain (可选链)
    2020 Web 前端学习记录
    WPF TreeView 支持多选
    linux (CentOS 7)报错:yum 命令报错 “ Cannot find a valid baseurl for repo: base/7/x86_6 ”
    node.js 报错
  • 原文地址:https://www.cnblogs.com/dins/p/struts.html
Copyright © 2020-2023  润新知