Spring MVC 核心组件与请求处理机制详解

简介: 本文解析了 Spring MVC 的核心组件及请求流程,核心组件包括 DispatcherServlet(中央调度)、HandlerMapping(URL 匹配处理器)、HandlerAdapter(执行处理器)、Handler(业务方法)、ViewResolver(视图解析),其中仅 Handler 需开发者实现。详细描述了请求执行的 7 步流程:请求到达 DispatcherServlet 后,经映射器、适配器找到并执行处理器,再通过视图解析器渲染视图(前后端分离下视图解析可省略)。介绍了拦截器的使用(实现 HandlerInterceptor 接口 + 配置类)及与过滤器的区别

一、Spring MVC 核心知识解析

  1. 核心组件
  • DispatcherServlet(核心控制器):本质是 Servlet,负责接收所有请求并分发到对应的处理器,是 Spring MVC 的 “中央调度器”,降低了组件间的耦合度。
  • HandlerMapping(处理器映射器):根据请求的 URL 匹配对应的 Handler(即 Controller 中的方法),并返回处理器对象及拦截器(如有)。
  • HandlerAdapter(处理器适配器):执行 HandlerMapping 找到的处理器(Controller 方法),并将结果封装为 ModelAndView 返回。
  • Handler(处理器):即我们编写的 Controller 中的业务方法,负责处理具体请求。
  • ViewResolver(视图解析器):将 ModelAndView 中的逻辑视图名解析为实际视图(如 JSP),但前后端分离模式下基本不用。
  1. 这些组件中,只有 Handler 需要我们开发,其他组件由 Spring 框架提供,Spring Boot 已自动配置,无需手动设置。
  2. 请求执行流程
  1. 用户发送请求到 DispatcherServlet。
  2. DispatcherServlet 调用 HandlerMapping,获取能处理请求的 Handler 及拦截器,返回给 DispatcherServlet。
  3. DispatcherServlet 通过 HandlerAdapter 执行 Handler(Controller 方法),得到 ModelAndView。
  4. DispatcherServlet 将 ModelAndView 传给 ViewResolver,解析为实际 View。
  5. DispatcherServlet 渲染 View(填充模型数据)。
  6. 响应结果给用户。
  1. 拦截器的使用与区别
  • 应用场景:登录校验、参数转换、数据脱敏等。使用步骤:
  1. 定义类实现HandlerInterceptor接口,重写preHandle(执行前)、postHandle(执行后)、afterCompletion(完成后)方法。
  2. 定义配置类实现WebMvcConfigurer,通过addInterceptors方法配置拦截路径和排除路径。
  • 与过滤器(Filter)的区别
  • 接口规范:拦截器实现HandlerInterceptor,过滤器实现Filter
  • 拦截范围:过滤器拦截 Web 服务器所有资源(如静态资源、Servlet),拦截器仅拦截 Spring 环境中的资源(主要是 Controller)。
  • 实现机制:过滤器基于函数回调,拦截器基于反射(AOP 思想)。两者功能有重叠,可根据场景选择。
  1. 异常处理:通过全局异常处理器统一处理异常,无需在 Controller、Service 中单独处理。实现方式:
  • 定义类并添加@RestControllerAdvice注解(组合了@ControllerAdvice@ResponseBody)。
  • 在方法上添加@ExceptionHandler注解,指定处理的异常类型(如@ExceptionHandler(Exception.class)处理所有异常),可针对不同异常定义多个处理方法,返回统一的错误信息。
  1. 常用注解
  • @RequestMapping:映射请求路径,可用于类(指定父路径)和方法,通过method属性限定请求方式(衍生出@GetMapping@PostMapping等)。
  • @RequestBody:接收请求体中的 JSON 数据,自动转换为 Java 对象。
  • @RequestParam:绑定请求参数,解决参数名与方法形参不一致的问题,可设置默认值(如@RequestParam(defaultValue = "1") int page)。
  • @PathVariable:从 URL 路径中获取参数(如/user/{id}中的id),绑定到方法形参。
  • @ResponseBody:将方法返回值直接作为响应体,对象 / 集合会自动转为 JSON。
  • @RequestHeader:获取指定的请求头信息(如@RequestHeader("token") String token)。
相关文章
|
8月前
|
人工智能 JSON 安全
Spring Boot实现无感刷新Token机制
本文深入解析在Spring Boot项目中实现JWT无感刷新Token的机制,涵盖双Token策略、Refresh Token安全性及具体示例代码,帮助开发者提升用户体验与系统安全性。
931 4
|
4月前
|
缓存 监控 Java
《深入理解Spring》拦截器(Interceptor)——请求处理的艺术
Spring拦截器是Web开发中实现横切关注点的核心组件,基于AOP思想,可在请求处理前后执行日志记录、身份验证、权限控制等通用逻辑。相比Servlet过滤器,拦截器更贴近Spring容器,能访问Bean和上下文,适用于Controller级精细控制。通过实现`HandlerInterceptor`接口的`preHandle`、`postHandle`和`afterCompletion`方法,可灵活控制请求流程。结合配置类注册并设置路径匹配与执行顺序,实现高效复用与维护。常用于认证鉴权、性能监控、统一异常处理等场景,提升应用安全性与可维护性。
|
4月前
|
缓存 安全 Java
《深入理解Spring》过滤器(Filter)——Web请求的第一道防线
Servlet过滤器是Java Web核心组件,可在请求进入容器时进行预处理与响应后处理,适用于日志、认证、安全、跨域等全局性功能,具有比Spring拦截器更早的执行时机和更广的覆盖范围。
|
10月前
|
NoSQL 安全 Java
深入理解 RedisConnectionFactory:Spring Data Redis 的核心组件
在 Spring Data Redis 中,`RedisConnectionFactory` 是核心组件,负责创建和管理与 Redis 的连接。它支持单机、集群及哨兵等多种模式,为上层组件(如 `RedisTemplate`)提供连接抽象。Spring 提供了 Lettuce 和 Jedis 两种主要实现,其中 Lettuce 因其线程安全和高性能特性被广泛推荐。通过手动配置或 Spring Boot 自动化配置,开发者可轻松集成 Redis,提升应用性能与扩展性。本文深入解析其作用、实现方式及常见问题解决方法,助你高效使用 Redis。
1068 4
|
11月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
411 0
|
11月前
|
负载均衡 Java Nacos
Spring Cloud五大组件
Spring Cloud五大组件
|
10月前
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
965 5
|
XML Java Maven
Spring 手动实现Spring底层机制
Spring 第六节 手动实现Spring底层机制 万字详解!
531 31
|
存储 前端开发 Java
【SpringMVC】——Cookie和Session机制
获取URL中参数@PathVarible,上传文件@RequestPart,HttpServerlet(getCookies()方法,getAttribute方法,setAttribute方法,)HttpSession(getAttribute方法),@SessionAttribute
739 11
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
2248 15

热门文章

最新文章