Spring MVC 与 Spring Boot:如何让你的 Web 应用既灵活又高效?

🏆本文收录于「滚雪球学SpringBoot」专栏,手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
前言:Spring MVC 的基础与 Spring Boot 的魔力🧙♂️
在开发 Web 应用时,Spring MVC 无疑是最为常见和流行的选择之一。它基于 Model-View-Controller 设计模式,使得开发者能够将业务逻辑、展示层和数据层分开,增加了代码的可维护性与扩展性。虽然 Spring MVC 具有强大的功能,但它的配置常常让人头疼,需要手动配置很多内容,包括 DispatcherServlet
、视图解析器、URL 路由等。
而 Spring Boot 通过自动化配置,简化了这些操作,使得开发者可以专注于应用逻辑本身,而不需要过多关注繁琐的配置细节。通过与 Spring MVC 的深度集成,Spring Boot 极大地提升了开发效率,同时减少了出错的机会。
今天,我们将一起深入探讨 Spring Boot 如何集成 Spring MVC,以及如何通过控制器、路由、视图解析来处理 Web 请求和响应。我们还将结合具体的案例,展示如何高效开发 Web 应用。
📚 目录
- 🌱 Spring MVC 概述:基础知识与核心概念
- 🛠 Spring Boot 如何集成 Spring MVC:开箱即用的自动配置
- 📍 控制器(Controller)与路由(Mapping):轻松处理请求
- 🔍 视图解析与返回类型(JSP、Thymeleaf 等):如何动态生成页面
- 🔧 Spring Boot 中的 Web 配置:如何更细致地定制应用
- 🎉 总结与进阶:打造一个简洁、灵活的 Web 应用
🌱 Spring MVC 概述:基础知识与核心概念 📝
1. Spring MVC 是什么?
Spring MVC 是 Spring Framework 中用于构建 Web 应用的模块之一。它基于 Model-View-Controller 设计模式,允许开发者将应用分为三个部分:
- Model(模型):表示数据、业务逻辑或应用程序状态。通常由 Java 对象来表示。
- View(视图):表示用户界面(UI),用来展示模型中的数据。视图通常通过模板引擎(如 JSP、Thymeleaf)来渲染。
- Controller(控制器):处理用户输入,负责更新模型并决定应该呈现哪个视图。控制器根据用户的请求选择对应的处理方法。
Spring MVC 使得 Web 应用的构建更加模块化,便于开发、测试和维护。它通过 DispatcherServlet 来分发请求到相应的控制器,并最终根据控制器的返回值来决定渲染哪个视图。
2. Spring MVC 工作流程
在 Spring MVC 中,所有的请求都由 DispatcherServlet
进行接收和分发。具体工作流程如下:
- 客户端发起请求:当用户在浏览器中输入 URL 并发送请求时,Spring MVC 的
DispatcherServlet
负责拦截所有的 HTTP 请求。 - 请求映射:
DispatcherServlet
根据请求的 URL 查找合适的控制器方法。这个过程由HandlerMapping
来实现。 - 调用控制器:
DispatcherServlet
将请求传递给匹配的控制器方法,控制器方法处理业务逻辑,并返回模型数据。 - 视图解析:根据控制器返回的模型数据和视图名称,
ViewResolver
会选择合适的视图进行渲染。 - 返回视图给客户端:最终,Spring MVC 渲染出的视图被发送回客户端,用户看到的是动态生成的 HTML 页面。
这个流程展示了 Spring MVC 的核心功能,帮助开发者组织应用逻辑,提升开发效率。
🛠 Spring Boot 如何集成 Spring MVC:开箱即用的自动配置 🧰
1. Spring Boot 与 Spring MVC 的集成
在 Spring Boot 中,Spring MVC 不是需要手动配置的独立模块,而是被自动集成到 Spring Boot 启动器中。只要你添加了 spring-boot-starter-web
依赖,Spring Boot 就会自动配置并启动一个支持 Spring MVC 的 Web 应用环境。
Spring Boot 会自动配置 DispatcherServlet
、HandlerMapping
、ViewResolver
等组件,让你能够专注于应用的业务逻辑,而无需去处理这些复杂的配置。
添加 Spring Boot Web Starter 依赖
首先,在你的 pom.xml
文件中添加 Spring Boot Web Starter 依赖。这个依赖包括了所有必要的库来启动一个 Web 应用。
<dependencies>
<!-- Spring Boot Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
这个依赖会自动为你包含:
- Spring MVC:支持控制器、视图解析、路由等。
- Tomcat:默认的嵌入式 Web 服务器(你可以根据需求替换为 Jetty 或 Undertow)。
- Jackson:用于处理 JSON 数据的库。
2. 自动配置的强大之处
Spring Boot 的自动配置使得 Spring MVC 集成变得轻而易举。例如,Spring Boot 会自动创建和配置 DispatcherServlet
,并且为你提供内嵌的 Tomcat 服务器。你只需要集中精力在业务功能上,而无需再手动配置每一个细节。
📍 控制器(Controller)与路由(Mapping):轻松处理请求 🛣️
1. 定义控制器
在 Spring Boot 中,控制器通常通过 @RestController
或 @Controller
注解来定义,并通过 @RequestMapping
或其他 HTTP 方法注解(如 @GetMapping
、@PostMapping
)来指定路由。
示例:创建一个基本的控制器
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
@GetMapping("/greet")
public String greet(String name) {
return "Hello, " + name + "!";
}
}
解析:
@RestController
:标注该类是一个控制器,并且返回的内容会直接写入 HTTP 响应体。@RequestMapping("/api")
:控制器的根路径是/api
,所有的路由都会以这个路径为前缀。@GetMapping("/hello")
:处理 GET 请求,当访问/api/hello
时,调用sayHello()
方法并返回相应内容。
2. 控制器方法的返回类型
Spring Boot 控制器方法的返回类型可以是多种形式,包括:
- 字符串:简单的文本内容。
- Java 对象:自动将 Java 对象转换为 JSON 格式返回(需要依赖 Jackson)。
- 视图名称:返回视图名称,Spring Boot 会使用视图解析器来渲染视图。
@GetMapping("/json")
public Map<String, String> json() {
Map<String, String> response = new HashMap<>();
response.put("status", "success");
response.put("message", "Data loaded successfully");
return response; // 自动转换为 JSON 格式
}
3. URL 路由与参数
Spring Boot 允许你灵活地使用路径参数和查询参数:
@GetMapping("/user/{id}")
public String getUser(@PathVariable String id) {
return "User ID: " + id;
}
@GetMapping("/search")
public String search(@RequestParam String query) {
return "Search results for: " + query;
}
@PathVariable
用于从 URL 路径中提取参数。@RequestParam
用于从查询字符串中提取参数。
🔍 视图解析与返回类型(JSP、Thymeleaf 等):如何动态生成页面 🎨
在 Web 应用中,生成动态页面是常见的需求。Spring Boot 允许你轻松地集成多种视图技术,例如 JSP 和 Thymeleaf。不同的视图技术有不同的用法和配置方式,我们来逐一看一下。
1. 使用 JSP 渲染视图
如果你习惯使用 JSP 作为视图引擎,可以在 Spring Boot 中轻松配置。
配置 JSP
在
src/main/resources/application.properties
中添加如下配置:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
创建 JSP 文件
在 src/main/webapp/WEB-INF/jsp/
目录下创建一个 JSP 文件,如 home.jsp
:
<!DOCTYPE html>
<html>
<head>
<title>Spring Boot JSP</title>
</head>
<body>
<h1>Welcome, ${name}!</h1>
</body>
</html>
在控制器中返回 JSP 视图
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("name", "Spring Boot");
return "home"; // 返回 home.jsp 视图
}
2. 使用 Thymeleaf 渲染视图
Thymeleaf 是 Spring Boot 默认支持的视图引擎,它提供了强大的功能和灵活性,特别适合现代 Web 应用。
添加 Thymeleaf 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
创建 Thymeleaf 文件
在 src/main/resources/templates/
目录下创建一个 home.html
文件:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Spring Boot Thymeleaf</title>
</head>
<body>
<h1>Welcome, <span th:text="${name}"></span>!</h1>
</body>
</html>
在控制器中返回 Thymeleaf 视图
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("name", "Spring Boot");
return "home"; // 返回 home.html 视图
}
小结:
Spring Boot 为你提供了灵活的视图解析方式,JSP 和 Thymeleaf 都可以轻松集成,根据你的需求选择合适的视图技术。
🎉 总结:Spring Boot 与 Spring MVC 完美结合,助你打造灵活高效的 Web 应用!
通过这篇文章,我们详细探讨了 Spring Boot 如何集成 Spring MVC,从配置控制器、路由到视图解析的各个方面。Spring Boot 让开发者能够轻松集成 Spring MVC,不再需要手动配置复杂的组件和依赖,提升了开发效率,也减少了出错的可能。
掌握了这些技巧后,你可以快速构建一个高效、灵活的 Web 应用。如果你有更多问题,欢迎随时与我讨论!
🧧福利赠与你🧧
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
✨️ Who am I?
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-
- 点赞
- 收藏
- 关注作者
评论(0)