Skip to content

基于 Servlet 栈的 Web 框架 (Web on Servlet Stack)

本部分文档涵盖了对基于 Servlet API 构建并部署到 Servlet 容器的 Servlet 栈 Web 应用程序的支持。

包括以下具体章节:

提示

对于响应式栈(Reactive-stack)的 Web 应用程序,请参阅 基于响应式栈的 Web 框架

本节摘要

  • Spring Web MVC
    核心控制器架构、异常处理和数据绑定。
  • REST 客户端
    包括 RestTemplateRestClient
  • 测试
    专门用于 Web 层的 MockMvc 和集成测试支持。
  • WebSockets
    包括 STOMP 协议支持和消息路由。

补充教学

1. 什么是“Servlet 栈”?

在 Spring 的世界里,Web 开发被划分为两条平行线:

  • Servlet Stack (本项目):基于传统的 Servlet API。它是阻塞式、线程池模型的。适用于大多数传统业务逻辑,生态极其丰富(如 Spring MVC, Hibernate 等)。常见的容器有 Tomcat, Jetty, Undertow。
  • Reactive Stack:基于 Project Reactor 和非阻塞 I/O。适用于需要极高并发、处理长连接(如长轮询或大文件流)的场景。

核心建议:如果你的项目没有特殊的高并发异步需求,Servlet 栈(Spring MVC)依然是目前最稳健、学习曲线最平缓的首选。

2. Spring MVC 的生命周期:DispatchServlet 的核心地位

理解 Spring MVC 的关键在于 DispatcherServlet。它是一个“前端控制器(Front Controller)”模式的实现:

  1. 用户发送请求。
  2. DispatcherServlet 查询 HandlerMapping 找到对应的 Controller。
  3. 通过 HandlerAdapter 调用 Controller 的方法。
  4. Controller 返回一个模型和视图(ModelAndView)。
  5. DispatcherServlet 使用 ViewResolver 渲染结果并返回给用户。

在现代开发中,通常返回的是 JSON,这时 ViewResolver 会被 HttpMessageConverter(如 Jackson)所取代。

3. REST 客户端的演进

Spring 提供了多种方式来调用外部 HTTP 接口:

  • RestTemplate:自 Spring 3.0 以来经典的选择,同步阻塞式。
  • RestClient:Spring 6.1 引入的新宠。它拥有类似 WebClient 的流式(Fluent) API 风格,但底层依然是同步的。旨在取代 RestTemplate 提供更好的代码阅读体验。
  • WebClient:虽然属于响应式栈,但在 Servlet 栈的应用中也可以使用,它支持同步和异步调用。

Based on Spring Framework.