浏览器请求过程
在 Spring MVC 中,处理一次 HTTP 请求的过程涉及多个关键组件,它们按特定顺序依次执行。每个组件都有其特定的职责,包括拦截、路由、请求处理、视图解析等。以下是处理一次 HTTP 请求的流程,涉及的主要组件包括 DispatcherServlet、HandlerMapping、HandlerAdapter、Interceptor、ViewResolver 等。
1. 请求到达 DispatcherServlet
- 当一个 HTTP 请求到达 Spring Boot 应用时,首先会由 DispatcherServlet 处理。
- DispatcherServlet 是整个 Spring MVC 请求处理流程的前端控制器,负责将请求转发到正确的处理器(即控制器)并返回响应。
2. 拦截器(Interceptor)
- 在 DispatcherServlet 处理请求之前,会经过 拦截器(Interceptor)链。
- 拦截器 可以在请求进入控制器之前进行处理,或者在请求响应之后做处理。
- 你可以在拦截器中执行日志记录、权限校验等操作。拦截器与过滤器(Filter)不同,拦截器是基于 Spring 的,而过滤器是基于 Servlet 的。
- 拦截器执行顺序:
preHandle
(请求到达控制器前) →postHandle
(控制器处理后,视图渲染前) →afterCompletion
(请求完成后,视图渲染后)。
示例代码:
3. 处理器映射器(HandlerMapping)
- HandlerMapping 是负责根据请求的 URL 查找合适的处理器(通常是控制器方法)并将请求分发给相应的处理器。
- Spring MVC 提供了多种 HandlerMapping,例如
RequestMappingHandlerMapping
,它用于根据请求的 URL、请求方法(如 GET 或 POST)等规则查找对应的处理器方法。
4. 处理器适配器(HandlerAdapter)
- HandlerAdapter 是用来适配具体的处理器(控制器方法)与 Spring MVC 中的请求处理机制的。
- 它的作用是执行具体的控制器方法,并返回执行结果。Spring MVC 中的 RequestMappingHandlerAdapter 主要用于支持基于注解的控制器方法。
5. 控制器(Controller)
- 控制器是处理请求的核心组件。在控制器中定义了 URL 请求的处理方法。
- 控制器的方法会被 HandlerAdapter 调用来执行业务逻辑。
示例代码:
6. 视图解析器(ViewResolver)
- 控制器方法返回的是模型数据(通常是一个对象),而视图解析器则负责根据返回值确定显示页面的视图。
- 如果返回的是一个字符串,视图解析器会根据该字符串查找对应的视图页面(如 JSP、Thymeleaf 模板等)。
- 视图解析器也负责将模型数据与视图进行绑定。
示例配置:
7. 视图渲染(View Rendering)
- 视图解析器根据控制器返回的视图名,选择合适的视图进行渲染。
- 例如,如果使用 JSP,视图渲染过程就是将返回的 JSP 页面与模型数据绑定,并生成最终的 HTML 页面响应。
- 最终,HTTP 响应会返回给客户端。
8. 返回响应
- 最终,响应会被 DispatcherServlet 返回到客户端。
- 如果是 RESTful API,返回的是 JSON 或其他数据格式;如果是 Web 应用,返回的是 HTML 页面。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析