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

相关推荐
Novproxy_Z9 分钟前
商用代理避坑:如何识别商家拿机房 IP 冒充住宅 IP
java·网络·tcp/ip
文丑颜不良啊1 小时前
LeetCode1481~1500题目解析
java·leetcode
2601_962885721 小时前
quotes 字段全解:涨跌幅、振幅、换手率的口径与单位
java·前端·spring
前端精髓1 小时前
调用openrouter的免费API模型
java·前端·javascript
步行cgn2 小时前
Spring MVC 拦截器 Interceptor 详解:从执行流程到实战应用
java·spring·mvc
文丑颜不良啊2 小时前
LeetCode1381~1400题目解析
java·leetcode
开开心心_Every2 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
萧瑟余晖3 小时前
Spring Batch核心模型与快速上手详解
java·spring·batch
缓慢更新3 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
LMT流氓兔5 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节