Skip to content

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

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

包括以下具体章节:

提示

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

本节摘要 ​

  • Spring Web MVC
    核心控制器架构、异常处理和数据绑定。
  • REST 客户端
    包括 RestTemplate 和 RestClient。
  • 测试
    专门用于 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.