首页 > 其他分享 >Spring MVC详细介绍

Spring MVC详细介绍

时间:2025-01-11 11:04:12浏览次数:3  
标签:请求 Spring 视图 MVC 详细 Handler DispatcherServlet

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}")
    @ResponseBody
    public 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表示是表现层,除此之外,一般不用别的注解代替。

标签:请求,Spring,视图,MVC,详细,Handler,DispatcherServlet
From: https://blog.csdn.net/Tomkruse11/article/details/145003029

相关文章

  • Springboot实现CTWing接口对接
    ctwing配置创建第三方应用进入后添加版本连接ctwing下载sdk解压后将lib目录下的本地jar安装到maven仓库mvninstall:install-file-Dfile=./ag-sdk-biz-348700.tar.gz-20250109.153115-SNAPSHOT.jar-DgroupId=com.ctg.ag-DartifactId=ag-sdk-biz-348700.tar.gz-Dversio......
  • Hive4.0.1集群安装部署(Hadoop版本为3.3.6)(详细教程)
    前置环境​​​Linux环境Zookeeper集群安装(详细教程)-CSDN博客HadoopHA高可用集群3.3.6搭建(详细教程)-CSDN博客MySQL8.0.40离线安装(详细教程)_mysql8.0.40ftp-CSDN博客Hadoop3.3.6官网下载链接地址部署规划服务器节点MetaStoreHiveServer2bigdata01√bigd......
  • 时装购物|时装购物系统|基于springboot的时装购物系统设计与实现(源码+数据库+文档)
    时装购物系统目录目录基于springboot的时装购物系统设计与实现一、前言 二、系统功能设计三、系统实现5.1管理员功能模块 四、数据库设计1、实体ER图  2、具体的表设计如下所示:五、核心代码 六、论文参考  七、最新计算机毕设选题推荐八、源码获取:博主......
  • SpringBoot3整合Swagger3时出现Type javax.servlet.http.HttpServletRequest not pres
    目录错误详情错误原因解决方法引入依赖修改配置信息 创建文件 访问 错误详情错误原因SpringBoot3和Swagger3版本不匹配解决方法使用springdoc替代springfox,具体步骤如下:引入依赖在pom.xml文件中添加如下依赖:<dependency><groupId>org.springdoc<......
  • Java项目:衣依服装销售平台(java+SpringBoot+Mybaits+Vue+elementui+mysql)
     源码获取:俺的博客首页"资源"里下载!项目介绍基于springboot的“衣依”服装销售平台的设计与实现环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.硬件环境:windows7/8/101G......
  • 深入解析 Spring AI 系列:以OpenAI与Moonshot案例为例寻找共同点
    今天,我们将重点探讨对接的业务逻辑。为了帮助大家更直观地掌握其中的规律性,我将通过对比OpenAI与《月之暗面》中的Moonshot两个案例来阐述这一点。通过这样的对比,大家可以更清晰地看到,这些对接业务的整体框架其实非常相似。换句话说,我们要做的工作只是其中的一小部分,但它同样是关......
  • 2024.12.20(SpringBoot知识点总结)
    5.2SpringBoot整合Junit5.2.1添加Junit的起步依赖org.springframework.bootspring-boot-starter-testtest1234565.2.2编写测试类packagecom.itheima.test;importcom.itheima.MySpringBootApplication;importcom.itheima.domain.User;importcom.itheima.ma......
  • 2024.12.19(SpringBoot知识点总结)
    5.1.7配置Mapper映射文件在src\main\resources\mapper路径下加入UserMapper.xml配置文件"select*fromuser12345675.1.8在application.properties中添加mybatis的信息#spring集成Mybatis环境#pojo别名扫描包mybatis.type-aliases-package=com.it......
  • 2024.12.23(SpringBoot知识点总结)
    5.4SpringBoot整合Redis5.4.1添加redis的起步依赖org.springframework.bootspring-boot-starter-data-redis123455.4.2配置redis的连接信息#Redisspring.redis.host=127.0.0.1spring.redis.port=63791235.4.3注入RedisTemplate测试redis操作@RunWith(Sprin......
  • 基于SpringBoot + Vue的养老院管理系统
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......