java - Spring中的HTTP请求是如何解码的?
问题描述
所以我的问题是我觉得没有得到太多解决的问题,我的问题很简单,当服务器接收到 HTTP 消息(请求)时,它是如何解码或处理的(假设服务器正在运行 spring mvc 应用程序)?
为了把我的问题放到上下文中,假设一个简单的 HTTP 消息由客户端发送到服务器,HTTP 消息在哪里解码?从某种意义上说,某些逻辑或代码必须解析 HTTP 请求以查看它包含的内容,我的问题是该操作在哪里发生?是调度程序 servlet 负责的事情吗?应用程序容器(即tomcat)是否负责解析/解码HTTP 消息?如果 spring 负责它,请给出解码 HTTP 消息涉及哪些类。
解决方案
似乎Dispatcher servlet负责解码 HTTP 请求,特别是HttpServlet。根据这个来源(以及其他一些来源),Dispatcher Servlet 似乎有一堆子层:
HttpServlet 类,顾名思义,是以 HTTP 为中心的 Servlet 实现,也由规范定义。
在更实际的术语中,HttpServlet 是一个抽象类,具有 service() 方法实现,它按 HTTP 方法类型拆分请求。
更多关于 DispatcherServlet:
作为 Web 应用程序的开发人员,我们真正想做的是抽象出以下繁琐的样板任务,并专注于有用的业务逻辑:
- 将HTTP请求映射到某种处理方法
- 将 HTTP 请求数据和标头解析为数据传输对象 (DTO) 或域对象
- 模型-视图-控制器交互
- 从 DTO、域对象等生成响应。
Spring DispatcherServlet 正是提供了这一点。
PS:好问题!我使用 Spring 已经有一段时间了,但从未真正质疑过如此详细的流程。谢谢你送我走这条路:)
推荐阅读
- javascript - 使用 useSelector 强制重新渲染
- python - 文件没有打开也没有通过 python 代码写入
- r - RSQLite 得到错误:没有这样的表,但显然有表
- atom-editor - 如何从终端命令 atom。我试过 atom 。但它不起作用
- angular - 动态创建一个 mat-accordion,其中默认扩展新项目
- c# - Unity没有运行基本脚本
- unix - 更改多个文件名 unix
- python - 我想知道 dbscan (sklearn) 算法的 x 和 y 轴标签
- keras - 如何使用 Keras 模型预测图像?
- databricks - ModuleNotFoundError:当我想在 databricks 中导入 sparkdl 时,没有名为“PIL”的模块