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

举报
bug菌 发表于 2025/02/25 17:01:46 2025/02/25
【摘要】 🏆本文收录于「滚雪球学SpringBoot」专栏,手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8 前言:Spring MVC 的基础与 Spring Boot 的魔力🧙‍♂️  在...

🏆本文收录于「滚雪球学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 应用。


📚 目录

  1. 🌱 Spring MVC 概述:基础知识与核心概念
  2. 🛠 Spring Boot 如何集成 Spring MVC:开箱即用的自动配置
  3. 📍 控制器(Controller)与路由(Mapping):轻松处理请求
  4. 🔍 视图解析与返回类型(JSP、Thymeleaf 等):如何动态生成页面
  5. 🔧 Spring Boot 中的 Web 配置:如何更细致地定制应用
  6. 🎉 总结与进阶:打造一个简洁、灵活的 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 进行接收和分发。具体工作流程如下:

  1. 客户端发起请求:当用户在浏览器中输入 URL 并发送请求时,Spring MVC 的 DispatcherServlet 负责拦截所有的 HTTP 请求。
  2. 请求映射DispatcherServlet 根据请求的 URL 查找合适的控制器方法。这个过程由 HandlerMapping 来实现。
  3. 调用控制器DispatcherServlet 将请求传递给匹配的控制器方法,控制器方法处理业务逻辑,并返回模型数据。
  4. 视图解析:根据控制器返回的模型数据和视图名称,ViewResolver 会选择合适的视图进行渲染。
  5. 返回视图给客户端:最终,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 会自动配置 DispatcherServletHandlerMappingViewResolver 等组件,让你能够专注于应用的业务逻辑,而无需去处理这些复杂的配置。

添加 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 允许你轻松地集成多种视图技术,例如 JSPThymeleaf。不同的视图技术有不同的用法和配置方式,我们来逐一看一下。

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-

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。