Spring MVC详细介绍

news/2025/1/11 17:10:18/

1.MVC 设计模式

MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序的逻辑分离成三个独立的组件:

  1. 模型(Model):模型是应用程序的数据和业务逻辑的表示。它负责处理数据的读取、存储和操作,以及业务规则的处理。模型通常是独立于用户界面的,可以在不同的视图和控制器之间共享和重用。比如java中的bean对象(User、Student)或者业务处理的bean(Servlet或者Dao对象,用来处理业务逻辑等。)
  2. 视图(View):视图是用户界面的呈现部分,负责展示数据给用户,并接收用户的输入。视图通常是根据模型的数据进行渲染和更新的,它可以是Web页面、图形界面或命令行界面等。
  3. 控制器(Controller):控制器是模型和视图之间的协调者,负责接收用户的输入并根据输入调用相应的模型逻辑。控制器将用户的请求转发给模型进行处理,并将处理结果传递给视图进行展示。控制器还可以处理视图的事件和状态变化。

MVC设计模式的作用如下:

  • 分离关注点:MVC将应用程序的不同关注点(数据、业务逻辑、用户界面)分离开来,使得各个组件可以独立开发、测试和维护,提高了代码的可读性和可维护性。
  • 提高可重用性:通过将数据和业务逻辑抽象成模型,可以在不同的视图和控制器之间共享和重用,减少了重复编写代码的工作量。
  • 改善可扩展性:MVC模式使得各个组件之间的耦合度降低,可以更方便地对应用程序进行扩展和修改,而不会影响其他组件的功能。
  • 改善用户体验:通过将用户界面和业务逻辑分离,MVC模式使得用户界面更加灵活和响应,可以根据不同的需求进行定制和优化。

总的来说,MVC设计模式通过将应用程序的逻辑分离成模型、视图和控制器,提供了一种结构化的开发方式,使得代码更加可读、可维护和可扩展,同时改善了用户体验和开发效率。

2.Spring MVC

2.1,Spring MVC 的介绍

Spring Web MVC是基于Servlet API构建的原始Web框架,也是Spring框架的一部分。它提供了灵活可扩展的MVC架构,方便开发者构建高性能的Web应用程序,并与 Spring 生态系统无缝集成。

2.2,Spring MVC与MVC的关系

Spring MVC与MVC之间的关系的要点总结:

  1. Spring MVC是一个Web框架,而MVC是一种架构模式。Spring MVC是基于MVC模式的实现之一。
  2. MVC是一种将应用程序的不同方面分离的设计模式,包括模型(Model)、视图(View)和控制器(Controller)。
  3. Spring MVC遵循MVC设计模式,将应用程序的不同方面分离开来,通过模型、视图和控制器的协作来处理Web请求。

综上所述,Spring MVC是Spring框架提供的基于MVC架构并继承了Servlet API的Web开发框架。它遵循MVC模式的原则,提供了一套完整的开发流程和特性。通过Spring框架的支持,它能够实现灵活性、可配置性和可扩展性,帮助开发者构建高性能的Web应用程序。

2.3,Spring MVC原理

核心组件

  • DispatcherServlet:前置控制器,负责调度其他组件的执行,可以降低不同组件之间的耦合性,是整个Spring MVC的核心模块
  • Handler:处理器,完成具体的业务逻辑,相当于Servlet(或者一个方法)
  • HandlerMapping:处理器映射器,DispatcherServlet是通过 HandlerMapping把请求映射到不同的Handler
  • HandlerInterceptor:处理器拦截器,是一个接口,如果我们需要进行一些拦截处理,可以通过实现该接口完成
  • HandlerExecutionChain:处理器执行链,包括两部分内容:Handler和HandlerInterceptor(系统会有一个默认的HandlerInterceptor,如果有额外拦截处理,可以添加拦截器进行设置)
  • HandlerAdapter:处理器适配器,Handler执行业务方法之前,需要进行一系列的操作包括表单的数据验证、数据类型转换、把表单数据封装到POJO等,这些一系列的操作都是由HandlerAdapter完成,DispatcherServlet通过HandlerAdapter执行不同的Handler
  • ModelAndView:封装了模型数据和视图信息,作为Handler的处理结果,返回给DispatcherServlet
  • ViewResolver:视图解析器,DispatcherServlet通过它把逻辑视图解析为物理视图,最终把渲染的结果响应给客户端

工作流程

  • (1)用户发送请求至前端控制器DispatcherServlet;
  • (2)DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handler;
  • (3)处理器映射器根据请求url找到具体的处理器Handler,生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet;
  • (4)DispatcherServlet 调用 HandlerAdapter处理器适配器,请求执行Handler;
  • (5)HandlerAdapter 经过适配调用 具体处理器进行处理业务逻辑;
  • (6)Handler执行完成返回ModelAndView;
  • (7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
  • (8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
  • (9)ViewResolver解析后返回具体View;
  • (10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
  • (11)DispatcherServlet响应用户。

简单总结

首先当一个用户请求(url)进入后,DispatcherServlet(前置控制器)接受请求,然后将该请求调用HandlerMapping获取到请求对应的Handler(比如方法),获取到Handler后就交给HandlerAdapter进行执行(相当于执行那段方法),执行完毕后返回ModelAndView(当做执行完毕后返回的数据),然后将ModelAndView交给ViewResolver进行解析和处理,返回具体的View,最后DispatcherServlet拿到view进行渲染,将模型数据填充,然后响应用户请求。

上述的是以前的项目如JSP等项目就是这种流程,但现在新项目都是前后端分离的项目,那么就会有所变化。

可以看到流程省去了将Handler处理完毕后返回的ModelAndView,也就是将视图处理那部分省去了,处理完Handler(方法)后直接将数据进行转换成JSON并响应给客户端,再由前端进行控制。

2.4,Spring MVC优点

(1)可以支持各种视图技术,而不仅仅局限于JSP;

(2)与Spring框架集成(如IoC容器、AOP等);

(3)清晰的角色分配:前端控制器(dispatcherServlet) ,请求到处理器映射(handlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)。

(4) 支持各种请求资源的映射策略。

3.Spring MVC使用

3.1Spring MVC常用注解
@RequestMapping:

用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。

@RequestBody:

将HTTP请求的请求体(body)部分转换为Java对象,并绑定到方法参数上

@RestController
public class UserController {@PostMapping("/user")public ResponseEntity<String> addUser(@RequestBody User user) {// 处理接收到的User对象// 这里假设User类包含了用户的姓名、年龄等信息return ResponseEntity.ok("User added successfully");}
}

上面的示例中,@RequestBody注解被用于addUser方法的参数user上,表示该方法接收一个User对象作为请求体,并将请求体中的JSON数据转换为User对象。

@ResponseBody:

@ResponseBody注解用于将方法的返回值直接作为HTTP响应体返回给客户端,而不是通过视图解析器解析为视图。

@RestController
public class UserController {@GetMapping("/user/{id}")@ResponseBodypublic User getUserById(@PathVariable Long id) {// 根据用户ID查询用户信息User user = userService.getUserById(id);return user;}
}

在上面的示例中,@ResponseBody注解被用于getUserById方法上,表示该方法的返回值会直接作为HTTP响应体返回给客户端。当客户端发送一个GET请求到"/user/{id}"路径时,Spring框架会调用getUserById方法获取用户信息,并将返回的User对象转换为JSON格式的数据,然后作为HTTP响应返回给客户端。

@RestController:

控制器注解,控制器注解一般是@Controller,@RestController相当于@ResponseBody + @Controller表示是表现层,除此之外,一般不用别的注解代替。


http://www.ppmy.cn/news/1561902.html

相关文章

嵌入式岗位面试八股文(篇一 关键字)

wx&#xff1a;嵌入式工程师成长日记 https://mp.weixin.qq.com/s/Mk8sodtNrodjD0Jjfo4Txw?token1728731884&langzh_CN 1.continue 作用&#xff1a;跳过本次循环体中余下尚未执行的语句&#xff0c;立即进行下一次的循环条件判定&#xff0c;可以理解为仅结束本次循环。…

java随机数Random类

在 Java 中&#xff0c;Random 类用于生成随机数。它是 java.util 包的一部分&#xff0c;可以生成不同类型的随机数&#xff0c;例如整数、浮点数、布尔值等。Random 类的实例可以用来产生各种随机数据&#xff0c;广泛应用于游戏、测试、加密、数据模拟等场景。 1. 创建 Ran…

HarmonyOS UIAbility 生命周期与窗口管理实践

HarmonyOS UIAbility 生命周期与窗口管理实践 引言 在HarmonyOS应用开发中&#xff0c;UIAbility是应用的核心组件之一&#xff0c;负责管理应用的生命周期和窗口行为。理解UIAbility的生命周期方法以及如何管理窗口是开发高效、稳定应用的关键。本文将通过分析一个名为Entry…

Spring AOP原理详解-Spring官方原版

一、概述 面向方面编程&#xff08;AOP&#xff09;补充了面向对象编程&#xff08;OOP&#xff09; 提供了另一种思考程序结构的方式。模块化的关键单元 在OOP中是类&#xff0c;而在AOP中&#xff0c;模块化的单位是方面。方面 实现跨越问题&#xff08;如事务管理&#xff…

MySQL 数据库性能调优指南

MySQL 是广泛使用的关系型数据库,其性能调优直接影响系统的响应速度和用户体验。在本篇文章中,我们将全面探讨 MySQL 性能调优的关键技术,包括查询优化、索引设计、配置调整、分区和分库分表等内容。 一、性能调优的基础 1. 确定性能瓶颈 性能调优的第一步是定位瓶颈,可以…

科研绘图系列:R语言科研绘图之标记热图(heatmap)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息参考介绍 科研绘图系列:R语言科研绘图之标记热图(heatmap) 加载R包 library(tidyverse) library(ggplot2) library(reshape)…

java进阶之maven

Maven Maven问题处理本地jar包导入本地maven库 Maven基础什么是mavenidea整合mavenmaven目录maven仓库maven远程仓库maven本地仓库 仓库的配置jdk的配置本地仓库的配置镜像仓库的配置访问仓库的优先级别如何在idea中进行配置 maven工程的类型POM模式-Maven工程关系依赖关系如何…

ASP.NET Core实现微服务--什么是微服务

微服务是这几年最流行的架构&#xff0c;说起架构不提微服务都不好意思跟人家打招呼。最近想要再梳理一下关于微服务的知识&#xff0c;并且结合本人的一些实践经验来做一些总结与分享。前面会分享一些概念性的东西&#xff0c;后面也会使用.net来实践&#xff0c;一步步完成一…