当前位置: 首页 > article >正文

Spring MVC详细介绍

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


http://www.kler.cn/a/474230.html

相关文章:

  • 【网络协议】静态路由详解
  • 全新免押租赁系统打造便捷安全的租赁体验
  • 内网基础-防火墙-隧道技术
  • Ungoogled Chromium127 编译指南 MacOS篇(八)- 开始编译
  • 使用WPF在C#中制作下载按钮
  • 基于phpstudy快速搭建本地php环境(Windows)
  • 如何查看本地sql server数据库的ip地址
  • oracle创建dblink
  • element(vue2)表格插槽
  • 第十一届蓝桥杯Scratch05月stema选拔赛真题—报数游戏
  • 滑动窗口——串联所有单词的子串
  • Linux好用软件
  • C++ 入门第26天:文件与流操作基础
  • 记录一次MySQL:caching_sha2_password报错
  • Linux中增加swap分区
  • 比QT更高效的一款开源嵌入式图形工具EGT-Ensemble Graphics Toolkit
  • 【gRPC】对称与非对称加解密和单向TLS与双向TLS讲解与go案例
  • vue 点击按钮复制文本功能(同时解决http不安全问题)
  • c# readonly 和 const的区别和使用场景
  • Android配件应用默认启动与USB权限申请区别
  • CODESYS MODBUS TCP通信(禾川Q1 PLC作为MODBUS TCP从站)
  • 【mysql】流程控制
  • 【前端,TypeScript】TypeScript速成(八):Promise
  • 机器学习的组成
  • PDFMathTranslate: Star13.8k,一款基于AI的PDF文档全文双语翻译PDF文档全文双语翻译,保留格式神器,你应该需要它
  • R语言的语法