高级java每日一道面试题-2024年9月16日-框架篇-Spring MVC和Struts的区别是什么?

如果有遗漏,评论区告诉我进行补充

面试官: 如何处理事务中的性能问题?

我回答:

在Java高级面试中,Spring MVC和Struts是两个常被提及的MVC框架,它们各自具有独特的特点和优势。以下是对这两个框架的详细比较:

架构设计方面

  • Spring MVC

    • MVC架构:Spring MVC也是一个基于MVC架构的Web框架。
    • Controller类 :控制器部分由Controller类实现,通常使用注解(如@Controller)来标记。
    • 配置文件 :Spring MVC可以使用XML配置文件(如spring-mvc.xml),但更常见的是使用注解配置(如@RequestMapping)。
      作为Spring框架的一部分,Spring MVC采用了一种轻量级的架构设计。它提供了全面的企业级特性,如依赖注入(DI)、面向切面编程(AOP)、事务管理等。这使得Spring MVC能够与Spring框架的其他部分无缝集成,从而提供更丰富的功能和更好的扩展性。
  • Struts

    • MVC架构:Struts是一个基于MVC(Model-View-Controller)架构的Web框架。
    • Action类:控制器部分由Action类实现,每个Action类对应一个用户请求。
    • 配置文件 :Struts使用struts-config.xml文件进行配置,包括Action映射、Forward配置等。
      Struts是一个独立的MVC框架,专注于Web层的MVC设计模式。虽然它也提供了MVC架构的支持,但相比之下,其架构设计更为传统,核心部分较为臃肿,包含更多的配置和框架文件。

控制器实现

Struts
  • Action类 :继承自Action类,必须实现execute方法。
  • ActionForm:用于封装表单数据,需要手动绑定和验证。
  • ActionForward :用于页面跳转,需要在struts-config.xml中配置。
Spring MVC
  • Controller类 :使用@Controller注解标记,方法使用@RequestMapping(或其派生注解如@GetMapping, @PostMapping)来映射请求。
  • Model :可以直接在方法参数中使用Model对象来传递数据到视图。
  • 返回值 :可以返回字符串(表示视图名称)或ModelAndView对象。

配置方式

Struts
  • XML配置 :所有的配置都在struts-config.xml文件中进行,包括Action映射、Forward配置等。
  • 配置繁琐:需要手动配置每个Action和Forward,配置文件可能变得非常庞大和复杂。
Spring MVC
  • 注解配置 :使用注解(如@Controller, @RequestMapping)来配置控制器和请求映射,减少了XML配置的繁琐。
  • 灵活配置:可以混合使用XML配置和注解配置,提供了更大的灵活性。

拦截机制

  • Spring MVC:Spring MVC采用方法级别的拦截机制。每个请求都会对应一个方法,并且请求参数会直接注入到方法的形参中。这种机制使得方法之间的数据隔离更加清晰,也便于进行单元测试。
  • Struts:Struts采用类级别的拦截机制。每次请求都会创建一个新的Action实例,并通过setter和getter方法将请求数据注入到Action的属性中。这种机制使得Action的属性在所有方法中共享,虽然方便了在多个方法中访问数据,但也增加了数据管理的复杂性。

依赖注入

Struts
  • 依赖注入:Struts 2支持依赖注入,但默认使用的是Struts自己的依赖注入框架。
  • 配置复杂 :依赖注入的配置相对复杂,需要在struts.xml中进行配置。
Spring MVC
  • 依赖注入:Spring MVC完全集成Spring框架的依赖注入功能,可以轻松地注入依赖。
  • 简单配置:依赖注入的配置非常简单,通常在Spring配置文件中进行。

性能和可测试性

  • 性能:由于Spring MVC采用了轻量级的架构设计和高效的拦截机制,因此它在性能方面通常优于Struts。此外,Spring MVC还支持异步处理和多线程并发,进一步提高了应用程序的响应速度和吞吐量。
  • 可测试性:Spring MVC的设计更加简单和灵活,使得开发者可以更容易地编写和执行单元测试。相比之下,Struts的测试通常需要更多的准备工作和依赖项,因此可测试性较差。

视图解析

Struts
  • 视图解析 :使用ActionForward对象来指定视图,需要在struts-config.xml中配置。
  • 固定视图:视图路径和名称通常是固定的,灵活性较低。
Spring MVC
  • 视图解析 :使用ViewResolver来解析视图,可以在配置文件中灵活配置视图解析规则。
  • 动态视图:视图路径和名称可以动态生成,灵活性较高。

表单处理

Struts
  • ActionForm:需要创建ActionForm类来封装表单数据,手动进行数据绑定和验证。
  • 数据绑定:数据绑定需要手动配置,灵活性较低。
Spring MVC
  • 命令对象:可以直接在Controller方法中使用命令对象(POJO)来接收表单数据,Spring自动进行数据绑定。
  • 数据验证:支持JSR-303(如Hibernate Validator)进行数据验证,配置简单。

插件和扩展

Struts
  • 插件:Struts 2提供了丰富的插件支持,如JSON插件、Tiles插件等。
  • 扩展性:扩展性较好,但需要更多的配置和代码。
Spring MVC
  • 插件:Spring MVC本身是Spring生态系统的一部分,可以方便地集成Spring的其他模块(如Spring Security、Spring Data等)。
  • 扩展性:扩展性非常好,可以通过拦截器、处理器等机制进行扩展。

总结

  • Spring MVC在配置灵活性、依赖注入、视图解析、表单处理等方面具有明显优势,更适合现代Web应用的开发。
  • Struts虽然也有一些优点,但在灵活性和易用性方面略逊一筹,更适合一些传统的Web应用。
相关推荐
亚林瓜子1 小时前
Spring集成Redis中禁用主机名DNS检测
redis·spring·ssh
C4程序员1 小时前
Java百度身份证识别接口实现【配置即用】
java·开发语言
炒空心菜菜1 小时前
MapReduce 实现 WordCount
java·开发语言·ide·后端·spark·eclipse·mapreduce
zy happy1 小时前
搭建运行若依微服务版本ruoyi-cloud最新教程
java·spring boot·spring cloud·微服务·ruoyi
芯眼2 小时前
STM32启动文件详解(重点)
java·开发语言·c++·stm32·单片机·mybatis
想躺平的小农2 小时前
EasyExcel详解
java
慧一居士2 小时前
EasyExcel集成使用总结与完整示例
java·excel
呦呦彬2 小时前
【问题排查】easyexcel日志打印Empty row!
java·开发语言·log4j
九章云极AladdinEdu3 小时前
GPU与NPU异构计算任务划分算法研究:基于强化学习的Transformer负载均衡实践
java·开发语言·人工智能·深度学习·测试工具·负载均衡·transformer
佩奇的技术笔记3 小时前
Java学习手册:客户端负载均衡
java·负载均衡