梳理 Spring Boot Web 开发的几个概念

Web 技术栈概念梳理

本文档梳理 Spring Boot Web 开发中常涉及的几组概念:Servlet / WebFlux、Tomcat / Netty、HttpServletResponse / ServerHttpResponse,以及 spring-boot-starter-web / spring-boot-starter-webflux


1. Servlet 与 WebFlux

Servlet

  • 定义:Java EE 标准里的 Web API,采用「一个请求一个线程」的同步、阻塞模型。
  • 技术栈spring-boot-starter-web → 内嵌 Tomcat + Spring MVC
  • 特点 :每个请求占用一个线程直到处理结束;请求/响应类型为 HttpServletRequest / HttpServletResponse;代码为同步写法。

WebFlux

  • 定义:Spring 的响应式 Web 框架,基于 Reactor(Netty),用少量线程通过事件驱动处理大量并发。
  • 技术栈spring-boot-starter-webflux → 内嵌 Netty + Spring WebFlux
  • 特点 :非阻塞 IO;返回 Mono/Flux;请求/响应类型为 ServerHttpRequest / ServerHttpResponse

如何判断当前环境

判断依据 Servlet(MVC) WebFlux
依赖 spring-boot-starter-web 仅有/主要用 spring-boot-starter-webflux
启动日志 Tomcat started on port(s) Netty started on port(s)
可注入的类型 HttpServletRequest / HttpServletResponse ServerHttpRequest / ServerHttpResponse

能否切换

可以,但属于「换一套 Web 栈」:需改依赖(去掉一种 starter、保留另一种),并相应改写 Controller、Filter、异常处理等(同步 ↔ 响应式),不是改一个配置即可。


2. Tomcat 与 Netty

Tomcat

  • 定位Servlet 容器(Web 容器 / 应用服务器)。
  • 职责:接收 HTTP 请求,按 Servlet 规范交给应用(如 Spring MVC),再写回响应。
  • 模型:同步、阻塞,一个请求占用一个工作线程。
  • 常见用法:运行 Spring MVC、JSP、传统 Java Web 应用。

Netty

  • 定位网络应用框架(不是 Servlet 容器)。
  • 职责:基于 NIO 的非阻塞网络通信(TCP/UDP/HTTP 等),负责连接管理、编解码、事件驱动等。
  • 模型:少量线程 + 事件循环,适合高并发、长连接。
  • 在 Spring 中的角色 :作为 Spring WebFlux 的默认 HTTP 服务器,提供 HTTP 能力。

对比小结

维度 Tomcat Netty
角色 Servlet 容器 网络 IO 框架
规范 实现 Servlet 规范 不实现 Servlet
模型 同步、阻塞 异步、非阻塞
Spring starter-web 内嵌 starter-webflux 使用

Tomcat是针对http层的。

Netty是一个网络组件,tcp,udp,http都可以。

Netty是基于Java NIO开发的,而Tomcat是Apache下的针对HTTP的服务器项目,前者更像一个中间件框架,后者更像一个工具。


3. HttpServletResponse 与 ServerHttpResponse

HttpServletResponse

  • 来源jakarta.servlet.http.HttpServletResponse(Servlet 规范)。
  • 使用场景:Spring MVC(Servlet 环境),由 Tomcat 等容器在每次请求时注入。
  • 设置响应头response.setHeader(name, value)

ServerHttpResponse

  • 来源org.springframework.http.server.reactive.ServerHttpResponse(Spring WebFlux)。
  • 使用场景:Spring WebFlux(Reactive 环境),由 Netty 适配层提供。
  • 设置响应头response.getHeaders().add(name, value)

为何在 Servlet 环境下要改用 HttpServletResponse

  • 项目若为 Spring MVC + Tomcat ,容器只会注入 HttpServletResponse ,不会注入 ServerHttpResponse
  • ServerHttpResponse 是接口,在 Servlet 请求中无法被实例化/注入,会导致参数解析失败(如:No primary or single unique constructor found for interface ServerHttpResponse)。
  • 因此:Servlet 环境用 HttpServletResponse;WebFlux 环境用 ServerHttpResponse,二者不能混用。

4. spring-boot-starter-web 与 spring-boot-starter-webflux

spring-boot-starter-web

  • 作用:引入「基于 Servlet 的 Web 应用」所需依赖。
  • 包含:Spring MVC、内嵌 Tomcat、Jackson、校验等。
  • 效果 :应用以同步、阻塞方式处理 HTTP;Controller 使用 HttpServletRequest / HttpServletResponse,返回普通对象或 ResponseEntity

spring-boot-starter-webflux

  • 作用:引入「基于 Reactive 的 Web 应用」所需依赖。
  • 包含:Spring WebFlux、Reactor Netty(内嵌 Netty)、Reactor 等。
  • 效果 :应用以异步、非阻塞方式处理 HTTP;Controller 使用 ServerHttpRequest / ServerHttpResponse,返回 Mono/Flux

对比小结

项目 spring-boot-starter-web spring-boot-starter-webflux
Web 框架 Spring MVC Spring WebFlux
内嵌服务器 Tomcat Netty
请求/响应类型 HttpServletRequest/Response ServerHttpRequest/Response
Controller 返回 普通对象、ResponseEntity Mono<T>、Flux<T>
编程风格 同步、阻塞 响应式、非阻塞

5. 关系总览

复制代码
Spring Boot Web 选型
├── spring-boot-starter-web
│   ├── Spring MVC(同步)
│   └── Tomcat(Servlet 容器)
│       └── HttpServletRequest / HttpServletResponse
│
└── spring-boot-starter-webflux
    ├── Spring WebFlux(响应式)
    └── Netty(网络框架,作为 HTTP 服务器)
        └── ServerHttpRequest / ServerHttpResponse
  • 选 starter-web:MVC + Tomcat + Servlet API。
  • 选 starter-webflux:WebFlux + Netty + Reactive API。
  • 二者是两套不同的技术栈,不能在同一应用中混用请求/响应类型(如 Servlet 环境下不能注入 ServerHttpResponse)。

文档基于项目实践整理,便于后续选型与排错时查阅。

相关推荐
光影少年17 分钟前
大屏页面,一次多个请求,请求加密导致 点击 全局时间选择器 时出现卡顿咋解决(面板收起会延迟1~2秒)
前端·javascript·vue.js·学习·前端框架·echarts·reactjs
超梦dasgg17 分钟前
Spring AI 智能航空助手项目实战
java·人工智能·后端·spring·ai编程
Mr.mjw32 分钟前
vue中封装一个环形进度条组件,根据外部盒子大小自适应变化
前端·javascript·vue.js
无心使然34 分钟前
Openlayers调用ArcGis影像服务之一动态地图、地图切片(/exportImage)
前端·javascript·数据可视化
lifewange36 分钟前
如何设计一个 RESTful API
后端·http·restful
a8a30239 分钟前
Laravel9.x新特性全解析
运维·spring boot·nginx
唯火锅不可辜负41 分钟前
uniapp开发公众号订阅功能踩坑小记
前端·vue.js
安德鲁202242 分钟前
Spring Boot + Undertow 全栈架构深度剖析时序图
后端
码事漫谈44 分钟前
AI 正在重塑职场:有人乘风破浪,有人悄然掉队
后端
opteOG1 小时前
游览器跨域问题详解
前端