SpringMVC介绍

spring内部组件流程

请求从用户发起,经过 DispatcherServlet(CEO)协调各组件,最终完成处理并返回视图

  1. 用户发起请求

  2. DispatcherServlet 它是 SpringMVC 的前端控制器,所有请求都先到这里,是整个流程的 "总指挥"。

  3. HandlerMapping DispatcherServlet 会先找 HandlerMapping,它的作用是根据请求路径(比如/user/login),找到对应的 Controller 方法(比如login())。

  4. HandlerAdapter 它是 "适配器",负责处理参数和响应的适配: 把请求中的原始参数(比如用户名)转换成 Controller 方法需要的格式(比如String username); 把 Controller 返回的结果(比如return login)封装成响应数据。

  5. Controller → Service → Dao Controller 调用 Service 层,Service 再调用 Dao 层(操作数据库,比如校验用户名密码),完成业务逻辑后,返回结果(比如return login)。

  6. ViewResolver Controller 返回的结果(比如login)会被 DispatcherServlet 传给 ViewResolver(视图解析器); 它根据前缀(比如/web-inf/html/)+ 返回值(login)+ 后缀(.html),拼接出最终的视图路径(比如/web-inf/html/login.html)。

  7. 返回视图给用户 VewResolver 找到对应的login.html页面,DispatcherServlet 将页面返回给用户,完成整个请求流程。

简单总结流程:用户请求 → DispatcherServlet → HandlerMapping(找 Controller 方法)→ HandlerAdapter(适配参数 / 响应)→ Controller/Service/Dao(业务处理)→ ViewResolver(解析视图路径)→ 返回视图给用户。

补充:

  1. 关于 HandlerAdapter 的返回值处理

    • 你提到了 HandlerAdapter 负责参数转换(入参),这很对。

    • 其实它还负责返回值处理 (出参)。Controller 方法执行完后返回的对象(比如 String "success"User 对象),也是由 HandlerAdapter 调用相应的 ReturnValueHandler 来处理的。

    • 如果是字符串 :它会把字符串传给 ViewResolver

    • 如果是对象(@RestController) :它会直接调用 HttpMessageConverter 转成 JSON 返回,跳过 ViewResolver

  2. 关于 ViewResolver 的适用范围

    • 你的流程描述的是传统的 服务端渲染(SSR) 模式(如 JSP, Thymeleaf)。

    • 在现代前后端分离架构中(Vue/React + Spring Boot),Controller 通常标注 @RestController 或直接返回对象。此时,数据会被直接序列化为 JSON,不会经过 ViewResolver ,而是直接通过 HttpMessageConverter 写给前端。

    • 修正后的通用流程... -> Controller -> Service -> Dao -> (判断返回类型) -> [若是页面: ViewResolver] / [若是数据: MessageConverter] -> 响应给用户

springmvc 作用

spring mvc框架主要用在控制层,控制层做的事情有: 1、接收前端参数 2、调用业务逻辑 3、响应前端数据 而spring mvc做的事情就是简化接受前端参数,和简化响应前端数据

总结

1、本文介绍了前端返送请求,后端的处理路程:用户发送请求到DispatcherServlet(前端控制器),再通过HandlerMapping根据请求路径找到对应的Controller 方法,再通过HandlerAdapter进行原始参数格式到目标参数格式的转换,Controller → Service → Dao执行任务后再通过ViewResolver拼接出最终的视图路径,返回视图给用户。 这里略微需要两点补充: 关于 HandlerAdapter 的返回值处理和关于 ViewResolver 的适用范围 。

2、又介绍了SpringMVC的作用。

相关推荐
JWASX1 小时前
【RocketMQ 生产者和消费者】- 事务消息的使用
java·rocketmq·java-rocketmq
Via_Neo1 小时前
接雨水问题 + 输入优化
java·开发语言·算法
xufengzhu1 小时前
多层Module依赖项目Maven编译错误的解决方案
java·maven
吃鱼不吐刺.1 小时前
阻塞队列。
java·开发语言
啦啦啦_99991 小时前
3. AI面试题之 FunctionCall
java
半夜修仙1 小时前
总结一下 Spring 中存取 Bean 的相关注解, 以及这些注解的用法.
java·笔记·学习·spring
彭于晏Yan2 小时前
Spring Cloud Security:Oauth2令牌存储
java·spring boot·spring cloud
不光头强2 小时前
ArrayList知识点
java·开发语言·windows
皙然2 小时前
吃透 Java 泛型
java