首页 > 解决方案 > Spring中的HTTP请求是如何解码的?

问题描述

所以我的问题是我觉得没有得到太多解决的问题,我的问题很简单,当服务器接收到 HTTP 消息(请求)时,它是如何解码或处理的(假设服务器正在运行 spring mvc 应用程序)?

为了把我的问题放到上下文中,假设一个简单的 HTTP 消息由客户端发送到服务器,HTTP 消息在哪里解码?从某种意义上说,某些逻辑或代码必须解析 HTTP 请求以查看它包含的内容,我的问题是该操作在哪里发生?是调度程序 servlet 负责的事情吗?应用程序容器(即tomcat)是否负责解析/解码HTTP 消息?如果 spring 负责它,请给出解码 HTTP 消息涉及哪些类。

标签: javaspringhttpspring-mvcserver

解决方案


似乎Dispatcher servlet负责解码 HTTP 请求,特别是HttpServlet。根据这个来源(以及其他一些来源),Dispatcher Servlet 似乎有一堆子层:

在此处输入图像描述

HttpServlet 类,顾名思义,是以 HTTP 为中心的 Servlet 实现,也由规范定义。

在更实际的术语中,HttpServlet 是一个抽象类,具有 service() 方法实现,它按 HTTP 方法类型拆分请求。

更多关于 DispatcherServlet:

作为 Web 应用程序的开发人员,我们真正想做的是抽象出以下繁琐的样板任务,并专注于有用的业务逻辑:

  • 将HTTP请求映射到某种处理方法
  • 将 HTTP 请求数据和标头解析为数据传输对象 (DTO) 或域对象
  • 模型-视图-控制器交互
  • 从 DTO、域对象等生成响应。

Spring DispatcherServlet 正是提供了这一点。



PS:好问题!我使用 Spring 已经有一段时间了,但从未真正质疑过如此详细的流程。谢谢你送我走这条路:)


推荐阅读