梳理 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

【大模型:知识图谱】--6.Neo4j DeskTop安装+使用

【大模型:知识图谱】--6.Neo4j DeskTop安装+使用

上一期讲了图知识库的安装, 【图数据库】--Neo4j 安装_neo4j安装-ZEEKLOG博客  现在来看看可视化管理程序:Neo4j DeskTop的安装. 需要先安装java环境,具体看上面 目录 1.Neo4j DeskTop版下载 2.Neo4j DeskTop版安装 3.Neo4j DeskTop版使用 3.1.本地实例 3.2.远程连接 3.3.导入数据 1.Neo4j DeskTop版下载 1、进入“Neo4j官网”下载DeskTop版本。 好像需要科学上网: 放一个网盘下载: 通过网盘分享的文件:neo4j-desktop-2.0.2-x64.exe 链接: https://pan.baidu.com/s/1BIjfzdAGWGU19MJrmZIqJg?

Microi吾码:开源低代码,微服务开发的利器

Microi吾码:开源低代码,微服务开发的利器

前言 在微服务架构的应用中,服务的灵活性和可扩展性至关重要。Microi吾码作为一个高效的微服务框架,凭借其轻量级、可插拔的特性,已经成为开发者构建分布式应用的首选工具。除了基础的微服务开发功能外,Microi吾码还提供了丰富的扩展功能,其中表单引擎是一个重要亮点。本篇博客将详细介绍Microi吾码的特点,以及如何使用其表单引擎和其他实用功能。 一. Microi吾码简介 Microi吾码是一个基于Spring Boot构建的微服务框架,致力于为开发者提供简单、灵活的解决方案,帮助他们高效构建分布式应用。它整合了常用的微服务功能,如服务注册与发现、负载均衡、熔断器、API网关、配置中心等,使得开发者无需从零开始构建基础设施,从而专注于业务逻辑。 1.1 核心特点 Microi吾码的核心特点: * 轻量级:基于Spring Boot,极大地简化了项目配置和开发流程。 * 高度可扩展:提供丰富的插件支持,可以根据需要定制功能。 * 开箱即用:内置常见的微服务功能,减少了开发者的重复工作。 * 开发友好:支持热部署和自动化构建,提升开发效率。 1.2 功能介绍

AstrBot+NapCat 一键部署 5 分钟搞定智能 QQ 机器人!cpolar解决公网访问 :cpolar 内网穿透实验室第 777 个成功挑战

AstrBot+NapCat 一键部署 5 分钟搞定智能 QQ 机器人!cpolar解决公网访问 :cpolar 内网穿透实验室第 777 个成功挑战

这篇教程会带你用最简单的方式:**只用一份 docker-compose,一次命令,5 分钟以内完成 AstrBot + NapCat 部署,把 DeepSeekAI 接入你的 QQ。**AstrBot 本身就是为 AI 而生的现代化机器人框架,插件丰富、支持 DeepSeek/OpenAI 等大模型、带 WebUI、可扩展性强,真正做到"搭好就能用"。照着做,你马上就能拥有属于自己的 QQ AI 机器人。 1 项目介绍 1.1 AstrBot是什么? GitHub 仓库:https://github.com/AstrBotDevs/AstrBot AstrBot 是一个专为 AI 大模型设计的开源聊天机器人框架,

AI、机器人、具身智能等领域顶级会议与学术组织解析

AI、机器人、具身智能等领域顶级会议与学术组织解析

本文基于中国计算机学会(CCF)推荐目录、国际学术声誉及2023-2024年行业数据,对人工智能、机器人、具身智能、计算机与软件领域的全球顶级会议进行分类梳理,并系统解析支撑会议权威性的核心学术组织,为科研工作者、学生投稿及行业人士跟踪前沿提供清晰参考。 一、国际顶级会议分类与影响力分析 国际顶级会议是全球前沿技术的核心发布平台,以学术权威性高、竞争激烈、引领领域发展为核心特征。以下按研究领域分类,结合接收率(2023-2024年统计)、学术引用率、行业影响力综合排序。 1. 人工智能(AI)综合领域 该领域聚焦机器学习、深度学习、经典AI理论等基础研究,均为CCF A类会议,是AI领域理论创新的核心阵地: 1. NeurIPS(神经信息处理系统大会,Conference on Neural Information Processing Systems) * 接收率:20%-25%(2024年数据) * 核心特色:机器学习与深度学习领域“标杆性会议”,近年热点议题集中在大模型高效训练、生成式AI、