第六章 SpringMVC框架

简介: Spring MVC核心组件包括DispatcherServlet、HandlerMapping、HandlerAdapter、Handler和ViewResolver,协同完成请求分发、处理与响应。其流程为:请求经DispatcherServlet分发,通过HandlerMapping定位处理器,由HandlerAdapter执行Handler,再经ViewResolver解析视图并渲染返回。此外,可通过拦截器实现登录校验等操作,结合@RestControllerAdvice和@ExceptionHandler统一处理异常,并使用@RequestMapping等注解简化开发。

Spring MVC的核心组件有哪些?

好的,SpringMVC中的组件比较多,职责各不相同,那我就说一下核心的几个。

  • 那首先第一个就是DispatchServlet,叫核心控制器,这个是SpringMVC中最为核心的组件,其本质就是一个Servlet,用于将请求分发给相应的处理程序,通过DispatchServlet这个组件,就可以降低组件之间的耦合度。
  • 那第二个核心组件就是HandlerMapping,叫处理器映射器,这个组件的作用,就是根据请求的url匹配能够处理这次请求的Handler(指Controller中的方法)
  • 那还有就是HandlerAdapter,叫处理器适配器,其作用呢,就是来执行Handler处理器的,并获取到执行的结果。
  • 第四个核心组件,就是Handler,叫处理器,其实可以简单理解为,就是我们开发的Controller中的方法。
  • 最后一个就是视图解析器 ViewResolver,其作用是进行视图的解析,根据逻辑视图名解析成真正的视图(View)。当然,在现在前后端分离的开发模式中,基本上也不存在对应的jsp、freemarker这一类的视图解析了。

那刚才所提到的这些个组件呢,只有一个组件,是需要我们开发的,就是Handler,其他的组件,都不需要我们自己开发,框架底层已经提供了这些组件,并且现在我们直接基于SpringBoot进行项目开发,这些组件我们也不需要在做额外的配置了,SpringBoot底层已经自动配置好了。

SpringMVC的请求执行流程是什么样的?

SpringMVC的请求执行流程如下所示:

1). 用户发送请求到前端控制器DispatcherServlet 。

2). DispatcherServlet接收到请求之后,会调用HandlerMapping(处理器映射器),来查找能够处理本次请求的处理器,生成处理器对象及处理器拦截器(如果有),然后再一起返回给DispatcherServlet 。

3). DispatcherServlet调用HandlerAdapter处理器适配器,让其执行对应的Handler。

4). HandlerAdapter执行对应的Handler(Controller中的方法),并将执行的结果封装在ModelAndView中返回给DispatcherServlet。

5). DispatcherServlet将ModelAndView传给ViewReslover(视图解析器),视图解析器负责对视图进行解析处理,最后返回视图对象View。

6). DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

7). DispatcherServlet响应用户 。

SpringMVC的拦截器用过没有?

  • 必答内容:

拦截器的应用场景还是很多的,比如在项目中,我们基于拦截器实现登录校验的功能、参数统一转换处理、数据的脱敏、统一编码处理等功能。 在SpringBoot项目拦截器的使用分为两步进行:

第一步呢,需要定义一个类实现HandlerInterceptor接口,然后再实现接口中的方法,比如:preHandle、postHandle、afterCompletion。

第二步呢,就是需要定义一个配置类,然后实现WebMvcConfigure,然后在这个配置类中配置拦截器,指定拦截器的拦截路径、排除哪些路径等信息。

  • 可能继续追问的问题:

你说的这些个功能,过滤器好像也能干,那拦截器Interceptor 与 过滤器Filter有什么区别?

  • 接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HandlerInterceptor接口。
  • 拦截范围不同:过滤器Filter会拦截web服务器中的所有资源,而Interceptor只会拦截Spring环境的资源,主要就是Controller。
  • 实现机制不同:过滤器在实现上是基于函数回调的,拦截器是基于java的反射机制的,属于面向切面编程的一种运用。

那其实在开发中,很多的功能,我们既可以通过过滤器Filter来实现,也可以通过拦截器Interceptor来实现。

SpringMVC怎么处理异常?

SpringMVC的异常处理,就比较简单了,可以直接使用Spring MVC中的全局异常处理器对异常进行统一处理,此时在我们的三层架构中,都不需要处理异常了,如果运行过程中出现异常,最终会被全局异常处理器捕获,然后返回统一的错误信息。

开发一个全局异常处理器需要使用到两个注解:@RestControllerAdvice 、@ExceptionHandler,@RestControllerAdvice加在全局异常处理器的这个类上,而@ExceptionHandler加在异常处理的方法上,来指定这个方法捕获什么样的异常。

那在定义异常处理方法的时候,可以也定义多个,根据业务的需求,可以针对不同类型的异常,进行不同的处理。

聊聊SpringMVC中的常用注解?

SpringMVC中的注解就比较多了,平时项目开发中比较常用的注解有以下几个:

1、@RequestMapping:用于映射请求路径,可以定义在类上和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径 。我们也可以基于该注解中的method属性,来限定请求方式,由此也衍生了几个注解,如:@GetMapping、@PostMapping、@PutMapping、@DeleteMapping。

2、@RequestBody:该注解实现接收请求的json数据,将json转换为java对象 。

3、@RequestParam:指定请求参数的名称 ,如果请求参数名与方法形参不一致,可以使用此注解映射绑定 。也可以使用该注解来设置参数的默认值。

4、@PathViriable:从请求路径中获取请求参数(/user/{id}),传递给方法的形式参数 。

5、@ResponseBody:注解实现将controller方法返回值直接作为请求体响应,如果返回值是对象/集合,会转化为json对象响应给客户端 。

6、@RequestHeader:获取指定的请求头数据 。

相关文章
|
2天前
|
机器学习/深度学习 存储 搜索推荐
第二章 基础算法
本文系统介绍了加密算法、排序算法及字符串处理等核心技术。涵盖对称与非对称加密、哈希摘要、电子签名原理,详解冒泡、快排、归并等排序算法的实现与优化,并结合实际场景讲解正则匹配与二分查找的应用,内容全面,适合技术学习与面试准备。
 第二章 基础算法
|
2天前
|
NoSQL Java 数据库连接
第七章 SpringBoot框架
SpringBoot简化了Spring开发,核心功能包括starter起步依赖、自动配置和内嵌服务器支持。通过条件注解实现Bean的自动化加载,支持自定义starter,并提供多种外部配置方式,提升开发效率与项目可维护性。(238字)
|
1天前
|
数据可视化 Java 关系型数据库
01-认识Activiti
工作流指具有审批流程的业务(如请假、报销等),通过流程引擎实现可视化管理。它支持单/多节点审批,广泛应用于CRM、TMS、WMS等系统。主流技术包括BPMN、Activiti、Flowable等,推动了泛微、金蝶、用友等企业的发展。
|
1天前
|
SQL 数据库连接 数据库
03-Activity代码实现
本文介绍了基于Activiti工作流引擎的入门实践,涵盖BPMN流程创建、部署、启动实例、任务查询与完成等核心操作。通过代码示例演示了流程定义部署、运行时实例管理及任务处理全过程,并结合数据库表变化说明执行效果,帮助开发者快速掌握工作流基本开发流程。
 03-Activity代码实现
|
1天前
|
Java Maven 数据库
02-Activiti工程搭建
本教程介绍如何在Idea中创建Maven工程并安装ActiBPM插件,包含插件下载、版本兼容性修复、手动修改JAR配置及验证安装等步骤,同时引入Activiti相关依赖,完成Spring Boot项目集成流程引擎的初步搭建。
02-Activiti工程搭建
|
1天前
|
存储 缓存 监控
EFC&CTO:缓存引发数据不一致问题排查与深度解析
EFC客户端在适配CTO测试时发现数据不一致问题,经排查为分布式缓存版本号回退导致读取旧数据,进而污染pagecache并写坏文件系统。通过维护递增版本号修复,最终解决问题并优化对POSIX语义的理解。
|
1天前
|
缓存
QLExpress使用及源码分析
QLExpress是阿里巴巴开源的轻量级规则引擎,支持通过注解与YAML配置实现业务逻辑与代码解耦。提供AST语法树解析、上下文构建及高效执行机制,适用于动态规则场景。GitHub地址:https://github.com/alibaba/QLExpress
|
1天前
|
Java
HUTOOL-Word生成-Word07Writer
Hutool封装POI实现Word(docx)生成,提供Word07Writer类,支持字体、段落添加,简化文档创建。需引入hutool-all与poi-ooxml依赖,适用于Java环境下的简单Word操作。
|
2天前
|
jenkins Java 持续交付
SpringBoot集成Jenkins
基于阿里云CentOS环境,配置JDK1.8后通过YUM安装Jenkins,手动设置JDK路径并修改启动用户为root及端口为8081,成功启动服务。后续安装Git、Maven并配置阿里云镜像与环境变量,完成插件初始化设置,实现持续集成环境搭建。
|
2天前
|
Java 开发工具 数据安全/隐私保护
项目《中州养老》
《中州养老》是一个为养老院打造的单体后台管理系统,涵盖预约、入住、健康监测等核心功能,包含员工管理端与家属小程序端。项目采用SpringBoot+Vue3技术栈,集成Redis缓存、阿里云IoT及OSS存储,实现护理等级、床位管理、智能设备监测等模块,并通过RBAC权限控制、定时任务与WebSocket报警推送,提升系统安全性与实时性。
 项目《中州养老》