高级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应用。
相关推荐
向宇it11 分钟前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
小蜗牛慢慢爬行13 分钟前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
Wyang_XXX1 小时前
CSS 选择器和优先级权重计算这么简单,你还没掌握?一篇文章让你轻松通关面试!(下)
面试
星河梦瑾1 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富1 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想1 小时前
JMeter 使用详解
java·jmeter
言、雲1 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
TT哇1 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
Yvemil72 小时前
《开启微服务之旅:Spring Boot 从入门到实践》(三)
java
Anna。。2 小时前
Java入门2-idea 第五章:IO流(java.io包中)
java·开发语言·intellij-idea