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的作用。

相关推荐
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang3 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi3 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号3 天前
java函数式编程--入门基础
java·编程·函数式编程