基于 Servlet 栈的 Web 框架 (Web on Servlet Stack)
本部分文档涵盖了对基于 Servlet API 构建并部署到 Servlet 容器的 Servlet 栈 Web 应用程序的支持。
包括以下具体章节:
- Spring Web MVC:成熟的基于模型-视图-控制器的 Web 框架。
- 视图技术:支持 Thymeleaf、FreeMarker、JSON、XML 等多种视图渲染。
- CORS 支持:跨源资源共享的全面配置。
- WebSocket 支持:实现双向通信的 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)”模式的实现:
- 用户发送请求。
DispatcherServlet查询HandlerMapping找到对应的 Controller。- 通过
HandlerAdapter调用 Controller 的方法。 - Controller 返回一个模型和视图(ModelAndView)。
DispatcherServlet使用ViewResolver渲染结果并返回给用户。
在现代开发中,通常返回的是 JSON,这时 ViewResolver 会被 HttpMessageConverter(如 Jackson)所取代。
3. REST 客户端的演进
Spring 提供了多种方式来调用外部 HTTP 接口:
RestTemplate:自 Spring 3.0 以来经典的选择,同步阻塞式。RestClient:Spring 6.1 引入的新宠。它拥有类似WebClient的流式(Fluent) API 风格,但底层依然是同步的。旨在取代RestTemplate提供更好的代码阅读体验。WebClient:虽然属于响应式栈,但在 Servlet 栈的应用中也可以使用,它支持同步和异步调用。