{T}

Struts 框架

Apache Struts 是一个开源的 Web 应用框架,主要用于创建基于 Java 的 Web 应用程序。Struts 基于 MVC(Model-View-Controller)设计模式,旨在帮助开发者更容易地创建和管理大型的 Web 应用程序。以下是对 Struts 框架的详细介绍:

历史定位:Struts 2 已停止新功能开发(Apache 2024 年宣布 S2-066 等系列漏洞后基本退役),新项目一律使用 Spring MVC / Spring Boot。本文仅作技术演进的历史参考。

1. 历史背景

  • 最初版本:Struts 1.x 由 Craig McClanahan 创建,并于 2000 年首次发布。最初它是一个 Jakarta 项目,后来成为 Apache 软件基金会的顶级项目。
  • Struts 2:Struts 2.x 是 Struts 的下一代版本,结合了 OpenSymphony WebWork 框架的功能。Struts 2 提供了更简洁的代码和更强大的功能。

2. 核心概念和组件

Model-View-Controller (MVC)

  • Model(模型):负责应用程序的数据和业务逻辑。
  • View(视图):负责展示数据和用户界面。
  • Controller(控制器):处理用户请求并协调模型和视图之间的交互。

Struts 2 的主要组件

  • Actions:动作类,是 Struts 2 的核心部分,负责处理用户请求。每个动作类对应一个特定的用户操作。
  • Interceptors(拦截器):用于在处理请求的不同阶段执行逻辑,如验证、文件上传、数据处理等。拦截器是可插拔的,允许开发者添加、删除或修改拦截逻辑。
  • Results(结果):定义了动作执行后的输出视图,可以是 JSP、FreeMarker 模板、Velocity 模板等。
  • ValueStack(值栈)和 OGNL(Object-Graph Navigation Language):值栈是 Struts 2 的核心数据结构,OGNL 是用于访问和操作值栈中数据的表达式语言。
  • Configuration Files(配置文件):通常为 struts.xml,用于定义动作、结果、拦截器等配置。

3. Struts 2 的工作流程

  1. 用户请求:用户在浏览器中发出一个 HTTP 请求。
  2. 过滤器调度:请求首先通过一系列的过滤器(如 FilterDispatcher)。
  3. Action 查找:根据请求的 URL 查找相应的 Action 映射。
  4. 拦截器处理:拦截器链按顺序处理请求,可以进行验证、文件上传等操作。
  5. 执行 Action:执行相应的 Action 类的逻辑。
  6. 结果处理:根据 Action 的返回值,确定并展示相应的视图(JSP、模板等)。

4. 主要特性

  • 基于 POJO:Action 类是简单的 POJO(Plain Old Java Objects),无需继承框架特定的类。
  • 拦截器机制:允许开发者在请求处理的不同阶段插入逻辑,提供了极大的灵活性和可扩展性。
  • 支持多种视图技术:可以使用 JSP、FreeMarker、Velocity 等多种视图技术。
  • 国际化和本地化:提供了对国际化和本地化的良好支持。
  • 强大的表单处理和验证:提供了一整套机制来处理表单输入和数据验证。

5. 优势和劣势

优势

  • 清晰的架构:基于 MVC 模式,代码结构清晰,易于维护。
  • 高度可扩展:通过拦截器和插件机制,可以方便地扩展框架功能。
  • 社区支持:作为一个老牌框架,拥有广泛的社区支持和丰富的文档资源。

劣势

  • 学习曲线:对于初学者来说,学习曲线较陡。
  • 配置复杂:需要编写大量的 XML 配置文件(虽然 Struts 2 提供了注解配置,但 XML 依然广泛使用)。
  • 性能问题:在处理大量并发请求时,性能可能不如一些现代的轻量级框架。

6. 总结

Struts 框架在 Java Web 开发中有着重要的地位,尤其是在企业级应用开发中。虽然随着技术的发展,出现了许多新的框架(如 Spring MVC),但 Struts 仍然被广泛使用。了解和掌握 Struts 的使用,对于 Java Web 开发者来说,是非常有价值的技能。

版本差异(Struts 2 → 当前技术栈)

特性Struts 2(2.5.x 末版)当前主流(Spring Boot 3.5.x)
维护状态停止新功能开发,仅安全修复Spring 6.2.x 活跃维护
控制器Action + struts.xml@RestController / @Controller
视图JSP/FreeMarker/Velocity前后端分离 + Thymeleaf(可选)
安全漏洞S2 系列 RCE 漏洞频发Spring Security 内置防护
依赖注入弱(需插件)Spring IOC 原生支持

Struts 的拦截器思想被 Spring MVC 的 HandlerInterceptor/AOP 继承,理解其 MVC 流程对学习现代框架仍有帮助,但生产项目不应再选型 Struts。