梳理 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 / HttpServletResponseServerHttpRequest / 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 能力。

对比小结

维度TomcatNetty
角色Servlet 容器网络 IO 框架
规范实现 Servlet 规范不实现 Servlet
模型同步、阻塞异步、非阻塞
Springstarter-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-webspring-boot-starter-webflux
Web 框架Spring MVCSpring WebFlux
内嵌服务器TomcatNetty
请求/响应类型HttpServletRequest/ResponseServerHttpRequest/Response
Controller 返回普通对象、ResponseEntityMono<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)。

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

Read more

Ollama 模型 + VS Code:私有化部署 Copilot 使用教程

Ollama 模型 + VS Code:私有化部署 Copilot 使用教程

Ollama 模型 + VS Code:私有化部署 Copilot 使用教程 在vscode中,copilot可以提高我们的工作效率但是github copilot每个月的使用有限制。购买价格较贵,那有没有什么其他的方法可以使用copilot呢?有一个利用ollama私有化部署模型并在vscode中辅助编程的方法。 Ollama 是一款开源、轻量且高效的本地AI模型运行工具,支持一键部署 Llama 3、Qwen2.5、DeepSeek、Mistral 等上百款主流大语言模型,无需复杂配置,普通电脑也能轻松运行本地AI。本教程将详细讲解 Ollama 的全平台安装、AI模型部署,并手把手教你在 VS Code 中集成使用,实现代码辅助、问答交互等功能,全程实操无冗余,新手也能快速上手。 一、教程前置准备 1. 硬件要求(关键) Ollama 对硬件的要求主要取决于部署的模型大小,核心是内存和显卡(无独立显卡也可使用CPU运行轻量模型),推荐配置如下,可根据模型选择灵活调整: * 轻量模型(

LLaMA-Factory全流程训练模型

LLaMA-Factory全流程训练模型

🤗本文主要讲述在docker下使用LLaMA-Factory训练推理模型。 🫡拉取镜像 首先需要启动docker,然后在终端中输入: docker run -tid --gpus all -p 8000:8000 --name LLM -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all --privileged=true ubuntu:20.04 * 这个命令启动了一个 Ubuntu 20.04 容器,使用所有可用的 GPU * 主机的 8000 端口映射到容器的 8000 端口 * 容器命名为 LLM,以特权模式运行容器 进入容器  docker exec -it LLM

Neo4j:图数据库使用入门

Neo4j:图数据库使用入门

文章目录 * 一、Neo4j安装 * 1、windows安装 * (1)准备环境 * (2)下载 * (3)解压 * (4)运行 * (5)基本使用 * 2、docker安装 * 二、CQL语句 * 1、CQL简介 * 2、CREATE 命令,创建节点、关系、属性 * 3、MATCH 命令,查询 * 4、return语句 * 5、where子句 * 6、创建关系 * 7、delete删除节点和关系 * 8、remove删除标签和属性 * 9、set添加、更新属性 * 10、ORDER BY排序 * 11、UNION合并 * 12、

AIGC 新势力:探秘海螺 AI 与蓝耘 MaaS 平台的协同创新之旅

AIGC 新势力:探秘海螺 AI 与蓝耘 MaaS 平台的协同创新之旅

探秘海螺AI:多模态架构下的认知智能新引擎 在人工智能持续进阶的进程中,海螺AI作为一款前沿的多功能AI工具,正凭借其独特的多模态架构崭露头角。它由上海稀宇科技有限公司(MiniMax)精心打造,依托自研的万亿参数MoE大语言模型ABAB6.5以及MiniMax语音大模型,展现出非凡的技术实力与应用潜力。MiniMax的核心团队源自商汤科技等业内知名企业,在多模态大模型研发领域深耕细作,为海螺AI的诞生奠定了坚实基础。 在这里插入图片描述 一、核心模型架构剖析 (一)基础模型:abab - 6.5 海螺AI的基础模型abab - 6.5采用了创新的混合专家系统设计,借助动态路由机制,即Sparse Gating Network,可依据输入内容智能激活8 - 12个子专家模型。这些子专家模型涵盖代码专家、多语言专家、逻辑推理专家等,各司其职,协同作业。在参数规模上,abab - 6.5总参数量高达1.2万亿,同时通过巧妙的设计,将活跃参数量控制在2000亿/query,有效平衡了模型的高容量与低推理成本。在训练优化环节,