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区别?

posted @ 2020-03-10 10:45  和风细羽  阅读(475)  评论(0编辑  收藏  举报